Getting Started with PHP Traits

PHP:8.0

PHP Traits 是 PHP 中用來做 Mixin 多重繼承的方法,主要目的是解決在單線物件繼承的限制下,讓程式碼可以重複使用,並且降低複雜度。

進行物件導向開發時,在程式架構明確之下,使用 繼承 可以解決大部份的狀況,但仍會有一些較為不是垂直相關的功能需要被重複使用,如果在新建物件實體之前,需要傳入各種相依使用的物件反而會降低可維護性。Trait 就是用來解決這樣子的情境,既保持程式結構,也增加可用性。

Basic Usage

Trait 的用法很簡單,只要搭配 trait 關鍵字使用就可以了,剩的跟寫 class 差不多。

此範例舉的情境為某公司出產汽車跟機車,但該公司不管任何產品,發行地區是一致的,因此使用 Trait 處理會是選項之一。

// Trait
trait ReleaseRegion {
    protected $allowRegion = [
        'TW' => 'Taiwan',
        'JP' => 'Japan',
        'LT' => 'Lithuania'
    ];

    public function getRegion() {
        return $this->allowRegion;
    }
}

class Car {}
class Scooter {}
class Model3 extends Car {
    // Use Trait in Object
    use ReleaseRegion;

    // Use multiple traits
    // use ATrait, BTrait
}

$carObj = new Model3;
// Use Trait function
print_r($carObj->getRegion());

Notice: 實際應用情境,相關的 code 都會拆成不同的檔案,因此 Trait 在使用時也要注意 namespace 問題。

Categories: PHP