PHP Trait特性

官方手冊:

自 PHP 5.4.0 起,PHP 實現了一種代碼複用的方法,稱爲 trait。

Trait 是爲類似 PHP 的單繼承語言而準備的一種代碼複用機制。Trait
爲了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中複用 method。Trait 和 Class
組合的語義定義了一種減少複雜性的方式,避免傳統多繼承和 Mixin 類相關典型問題。

Trait 和 Class 相似,但僅僅旨在用細粒度和一致的方式來組合功能。 無法通過 trait
自身來實例化。它爲傳統繼承增加了水平特性的組合;也就是說,應用的幾個 Class 之間不需要繼承。

什麼是 Trait ?

其實說通俗一點,就是能把重複的方法拆分到一個文件,通過 use 引入以達到代碼複用的目的。

那麼,我們應該怎麼樣去拆分我們的代碼纔是合適的呢?我的看法是這樣的:

Trait,譯作 “特性”、“特徵”、“特點” 。那麼問題就來了:什麼纔是特性?

一個銷售公司有很多種產品:電視,電腦與鼠標墊,卡通手辦等。其中鼠標墊與卡通手辦是非賣品,只用于贈送。

那麼這裏的 “可賣性” 就是一個特性,非賣品是沒有價格的。我們便可以抽象出 “可賣性” 這個 Trait 來。

<?php
trait Sellable
{
    protected $price = 0;

    public function getPrice()
    {
        return $this->price;
    }

    public function setPrice(int $price)
    {
        $this->price = $price;
    }
}

class books extends A {
    use Sellable;
}

class movie extends B {
    use Sellable;
}

class air extends C {

}
?>

總結

它不僅僅是可複用代碼段的集合,它應該是一組描述了某個特性的的屬性與方法的集合。它的優點在於隨意組合,耦合性低,可讀性高。

發佈了137 篇原創文章 · 獲贊 43 · 訪問量 285萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章