說通俗點,PHP中使用trait關鍵字是為了解決一個類既想整合基礎類別的屬性和方法,又想擁有別的基礎類別的方法,而trait一般情況下是和use搭配使用的。請看下面的範例程式碼
<?php header("Content-type:text/html;charset=utf-8"); trait Drive { //使用trait 建立一個基礎類別 public $carName = 'trait'; //定義一個變數 public function driving() { //定義一個方法 echo "driving {$this->carName}<br>"; } } class Person { //建立一個基礎類別 public function eat() { //定義一個方法 echo "eat<br>"; } } class Student extends Person { //建立一個子類繼承Person類 use Drive; //使用trait定義的類Drive public function study() { //定義一個方法 echo "study<br>"; } } $student = new Student(); //建立物件 $student->study(); //呼叫自己定義的方法 $student->eat(); //呼叫父類別方法 $student->driving(); //呼叫trait定義的類Drive的方法 ?>
執行效果圖如圖所示
上面的例子中,Student類通過繼承Person,有了eat方法,通過組合Drive,有了driving方法和屬性carName。
如果Trait、基礎類別和本類中都存在某個同名的屬性或者方法,最終會保留哪一個呢?
<?php header("Content-type:text/html;charset=utf-8"); trait Drive { //使用trait定義一個類 public function hello() { //定義一個方法 echo "我是trait類的方法hello()<br>"; } public function driving() { echo "我是trait類的方法driving()<br>"; //定義一個方法 } } class Person { //建立父類別 public function hello() { //定義一個方法 echo "我是父類別的方法hello()<br>"; } public function driving() { //定義一個方法 echo "我是父類別的方法driving()<br>"; } } class Student extends Person { //建立子類繼承Person類 use Drive; //使用trait定義的類Drive public function hello() { //定義一個方法 echo "我是子類的方法hello()<br>"; } } $student = new Student(); //建立物件 $student->hello(); //呼叫hello方法 $student->driving(); //呼叫deiving方法 ?>
執行效果如圖所示
因此得出結論:當方法或屬性同名時,當前類中的方法會覆蓋 trait的 方法,在這個例子中也就是student的hello()方法覆蓋了trait中的hello()方法。而 trait 的方法又覆蓋了基礎類別中的方法。在這個例子中,trait的driving()方法就是覆蓋了Person類中driving()方法。
如果想了解更多php的相關知識可以到網站的php模組中去學習更多有意思的知識。
以上就是PHP中關於trait使用方法的詳細介紹的詳細內容,更多請關注TW511.COM其它相關文章!