* 1.trait是為單繼承語言量身定制的代碼復用機制;
* 2.之前可以通過函數或類來實現代碼復用;
* 3.trait可以簡單的理解為一個類方法的集合,工作在父類與子類之間;
* 4.但是trait不僅僅局限于方法集合,還支持抽象,靜態與屬性;
* 5.當前類成員會覆蓋trait類成員,而trait中的成員,又可以覆蓋同名類成員
* 6.重要提示:trait不是類,不能實例化,切記切記
//聲明父類: Person
if (!html' target='_blank'>class_exists( Person )) { class Person protected $name; public function __construct($name= 小明 ) $this- name = $name; public function study($course= php ) return $this- name. 在學習 .$course;
//trait中同樣支持抽象,以及靜態方法,我放在一起寫了 //我把這個方法聲明為抽象的同時,也聲明為靜態 abstract public static function hobby($name);
//在trait中也聲明一個與父類同名的study()方法,參數修改一下以示區別 public function study($course= java ) return $this- name. 在學習 .$course;}
//聲明trait類:Recreation 娛樂
if(!trait_exists( Recreation )){ trait Recreation //這個trait類中也聲明一個與Course中同名的方法sport //注意: 屬性$friend不允許與Course::sport()同名 //因為目前trait中還沒有處理同名屬性的機制,期待新版本會解決 //這里我們將$friend 修改為 $friend1 public $friend1= 小軍 public function sport($name= 打藍球 )// return $this- name. 在學習 .$name; //trait中可以訪問父類中的屬性 return $this- name. 和 .$this- friend1. 在學習 .$name;
}
聲明子類: Student ,繼承自 父類: Person
class Student extends Person //導入trait類// use Course; //子類支持導入多個trait類,但不可避免的會遇到方法重名問題,怎么解決呢?// use Course, Recreation; //同時引入二個trait類 //如果這二個trait類中有重名方法,要用以下語句結構解決 use Course, Recreation { //訪問sport()方法沖突時,使用Course::sport()代替掉Recoreation::sport() Course::sport insteadof Recreation; //再訪問Recoreation::sport()時啟用別名 mySport() Recreation::sport as mySport; //子類中必須實現trait中聲明的抽象方法hobby() public static function hobby($name) return $name; //在子類中再聲明一個與trait類同名的study()方法,參數修改一下以示區別 public function study($course= python ) return $this- name. 在學習 .$course;}
//實例化Student類
$student = new Student();
//1.訪問父類Person中的方法
echo $student- study();echo hr
//2.訪問trait類中的方法
echo $student- sport();echo hr
//3調用trait中的抽象靜態方法,必須要用Student來訪問
echo Student::hobby( 抽煙喝酒燙頭 echo hr
//4.當trait中存在與父類同名方法時,trait優先級要高
echo $student- study();
//5.當子類中存在與trait類同名方法時,子類優先級要高
echo $student- study();echo hr
//6.子類可以從多個trait中獲取方法集
echo $student- sport();echo hr echo $student- mySport();
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答