php – 使用 use 解決數個 trait 遇到重複指定的方法、別名指定
<?php trait A { public function talk() { echo "Hello"; } } trait B { public function talk() { echo "World"; } } class talker { use A, B { // B 的 talk() 覆蓋掉 A 的 talk()。 B::talk insteadof A; // 可以把 A 的 talk() 改為別名 alias_talk ,使之可以被呼叫。 A::talk as alias_talk; } } $talker = new talker; $talker->talk(); //輸出 World $talker->alias_talk(); //輸出 Hello
trait A 跟 trait B 都有定義相同的 talk() ,talker 類別同時使用了特徵 A 跟特徵 B,那麼 talk() 就會產生衝突。
所以我們要使用 use 指定哪個特徵的 talk() 要替換哪個特徵的 talk()。
use A, B { // B 的 talk() 替換 A 的 talk() B::talk insteadof A; }
可以使用關鍵字 as 來做為 trait 方法的別名。如
A::talk as alias_talk;