這篇文章主要介紹了PHP中trait使用方法,個人覺得蠻不錯的,現在分享給大家,也給大家做個參考。一起過來看看吧。下面開始正文。
說通俗點,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使用方法的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!