舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php trait Demo { public $a = 22; public function do_something() { echo "hello" ; } } class Demo2 { use Demo; } $d = new Demo2(); echo $d ->a . "\n" ; echo $d ->do_something(); /* 《程式語言教學誌》的範例程式 檔名:class10.php 功能:示範 PHP 程式 作者:張凱慶 時間:西元 2013 年 2 月 */ ?> |
特徵機制使用關鍵字 trait 定義
2 | trait Demo { |
之後使用該特徵機制 Demo 的類別,利用 use 便可重複利用 Demo 定義好的屬性與方法
10 11 12 | class Demo2 { use Demo; } |
執行結果如下

也像類別可實作多個介面一樣,單一類別可 use 多個特徵機制,若是數個特徵機制中有相同名稱的方法,就須額外指定用哪個特徵機制中的方法,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?php trait Demo3 { public function do_something() { echo "hello" ; } } trait Demo4 { public function do_something() { echo "yes" ; } } class Demo5 { use Demo3, Demo4 { Demo3::do_something insteadof Demo4; } } $d = new Demo5(); echo $d ->do_something(); /* 《程式語言教學誌》的範例程式 檔名:class11.php 功能:示範 PHP 程式 作者:張凱慶 時間:西元 2013 年 2 月 */ ?> |
Demo3 與 Demo4 都有相同名稱的 do_something() ,此時需要在 use 加上大括弧指定用哪個特徵機制的 do_something()
15 16 17 | use Demo3, Demo4 { Demo3::do_something insteadof Demo4; } |
先寫特徵機制名稱,然後作用域運算子加上方法名稱,接著 insteadof 與不使用的特徵機制名稱,此例執行結果如下

中英文術語對照 | |
---|---|
特徵機制 | trait |
類別 | class |
介面 | interface |
屬性 | property |
方法 | method |
物件 | object |
您可以繼續參考
類別與物件
相關目錄
回 PHP 快速導覽
回 PHP 教材
回首頁
參考資料
http://www.php.net/manual/en/language.oop5.traits.php
沒有留言:
張貼留言