越來越多的框架和**開始使用traits方式去組織一些功能,這是非常高效的**組織結構。
通過trait來減少不必要的類繼承關係,讓**更加復用,形成可以拔插的**集合。
通過逗號分隔,在 use 宣告列出多個 trait,可以都插入到乙個類中。
單個的例子:
<?php
trait seller
}class myseller
$seller = new myseller();
$seller->sell();
多個trait的例子:
<?php
trait money
}trait factory
}class user
} $user = new user();
$user->show(); // => i am an user
當引入trait的類也有同名方法或者函式,那麼當前類的該方法會覆蓋trait中的同名方法。
如上面這個例子中user類和money trait都有show方法,則執行之後呼叫的是user類的show方法,列印出"i am an user"的內容。
但是如果兩個 trait 都插入了乙個同名的方法,如果沒有明確解決衝突將會產生乙個致命錯誤。我們需要明確指定是否某個trait的方法或者盡量不要讓不同trait裡面存在同名方法。
1.使用 insteadof 操作符來明確指定使用衝突方法中的哪乙個。例如:
<?php
trait token
public function tips()
}trait tester
public function tips()
}class controller
}$con = new controller();
$con->tostring('hello');
$con->tips('my god!');
或者使用別名方式去避免同名問題,如:
class controller
}
<?php
use illuminate\foundation\bus\dispatchesjobs;
use illuminate\routing\controller as basecontroller;
use illuminate\foundation\validation\validatesrequests;
use illuminate\foundation\auth\access\authorizesrequests;
use illuminate\foundation\auth\access\authorizesresources;
class controller extends basecontroller
這裡就使用了四個trait. php中traits學習筆記
越來越多的框架和 開始使用traits方式去組織一些功能,這是非常高效的 組織結構。通過trait來減少不必要的類繼承關係,讓 更加復用,形成可以拔插的 集合。通過逗號分隔,在 use 宣告列出多個 trait,可以都插入到乙個類中。單個的例子 trait seller class myseller...
PHP中的Traits詳解
trait drive n class person class student extends person student new student student study student eat student driving 輸出結果如下 study eatdriving trait 上面...
PHP 5 4中的traits特性
trait 是 php5.4 中的新特性,是 php 多重繼承的一種解決方案。例如,需要同時繼承兩個 abstract class,這將會是件很麻煩的事情,trait 就是為了解決這個問題。簡單使用 首先,當然是宣告個 trait,php5.4增加了 trait 關鍵字 trait first tr...