自 php 5.4.0 起,php 實現了**復用的乙個方法,稱為 traits。
traits 是一種為類似 php 的單繼承語言而準備的**復用機制。trait 為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中復用方法集。traits 和類組合的語義是定義了一種方式來減少複雜性,避免傳統多繼承和混入類(mixin)相關的典型問題。
trait 和乙個類相似,但僅僅旨在用細粒度和一致的方式來組合功能。trait 不能通過它自身來例項化。它為傳統繼承增加了水平特性的組合;也就是說,應用類的成員不需要繼承。
trait是在php5.4中加入的,它既不是介面也不是類。主要是為了解決單繼承語言的限制。是php多重繼承的一種解決方案。例如,需要同時繼承兩個 dotasghmqabstract class, 這將會是件很麻煩的事情,trait 就是為了解決這個問題。它能被加入到乙個或多個dotasghmq已經存在的類中。它宣告了類能做什麼(表明了其介面特性),同時也包含了具體dotasghmq實現(表明了其類特性)
簡單使用
首先,當然是宣告個 trait,php5.4 增加了 trait 關鍵字
trait first_trait
function second_method()
}同時,如果要在 class 中使用該 trait,那麼使用 use 關鍵字
class first_class
$obj = new first_class();
// executing the method from trait
$obj->first_method(); // valid
$obj->second_method(); // valid
使用多個 trait
在同個 class 中可以使用多個 trait
trait first_trait
}trait second_trait
}class first_class
$obj= new first_class();
// valid
$obj->first_method(); // print : method
// valid
$obj->second_method(); // print : method
trait 之間的巢狀
同時,trait 之間也可以相互dotasghmq的巢狀,例如
trait first_trait
}trait second_trait
}class first_class
$obj= new first_class();
// valid
$obj->first_method(); // print : method
// valid
$obj->second_method(); // print : method
trait 的抽象方法(abstract method)
我們可以在 trait 中宣告需要實現的抽象方法,這樣能使使用它的 class 必須實現它
trait first_trait
// 這裡可以加入修飾符,說明呼叫類必須實現它
abstract public function second_method();
}class first_method
}trait 衝突
多個 trait 之間同時使用難免會衝突,這需要我們去解決。php5.4 從語法方面帶入了相關 的關鍵字語法:insteadof 以及 as ,用法參見
trait first_trait
}trait second_trait
}class first_class
} $obj = new first_class();
// output: from first trait
$obj->first_function();
上面就是些 trait 比較基本的使用了,更詳細的可以參考官方手冊。這裡總結下注意的幾 點:
trait 會覆蓋呼叫類繼承的父類方法
trai 無法如 class 一樣使用 new 例項化
單個 trait 可由多個 trait 組成
在單個 class 中,可以使用多個 trait
trait 支援修飾詞(modifiers),例如 final、static、abstract
我們能使用 insteadof 以及 as 操作符解決 trait 之間的衝突
本文標題: php中的trait 特性及作用
本文位址:
PHP 特性之 trait 二
前面我們介紹了trait的基本使用,下面來介紹下trait比較複雜的用法使用多個traittrait member trait admin class showmember member new showmember member info member show 直接使用,逗號隔開,以上程式將會輸...
PHP中trait使用方法
1.php中使用trait關鍵字是為了解決乙個類既想整合基類的屬性和方法,又想擁有別的基類的方法,而trait一般情況下是和use搭配使用的。trait drive n class person class student extends person student new student stu...
PHP中trait使用方法詳細介紹
說通俗點,php中使用trait關鍵字是為了解決乙個類既想整合基類的屬性和方法,又想擁有別的基類的方法,而trait一般情況下是和use搭配使用的。carname n class person class student extends person student new student stud...