Trait和Class類似,提供一種程式碼複用機制。無法透過Trait自身來例項化,它為傳統繼承增加了水平特性的組合。例如:
trait A
{
protected function fa () {
// TODO
}
}
class B
{
// TODO
}
class C extends B
{
use A;
}
- 從基類繼承的成員會被 trait 插入的成員所覆蓋。優先順序是來自當前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法。
- 透過逗號分隔,在 use 宣告列出多個 trait,可以都插入到一個類中。
- 為了解決多個 trait 在同一個類中的命名衝突,需要使用 insteadof 運算子來明確指定使用衝突方法中的哪一個。
- as 運算子可以 為某個方法引入別名。 注意,as 運算子不會對方法進行重新命名,也不會影響其方法。
- 正如 class 能夠使用 trait 一樣,其它 trait 也能夠使用 trait。在 trait 定義時透過使用一個或多個 trait,能夠組合其它 trait 中的部分或全部成員。
- Trait 定義了一個屬性後,類就不能定義同樣名稱的屬性,否則會產生 fatal error。 有種情況例外:屬性是相容的(同樣的訪問可見度、初始預設值)。
本作品採用《CC 協議》,轉載必須註明作者和本文連結