Trait是PHP5.4.0起引入,它既像类又像接口。trait是类的部分实现,可以混入一个或多个现有的PHP类中。
Trait有两个浸染:表明类可以做什么(像是接口);供应模块化实现(像是类)。
PHP措辞利用的是单继续模型,大多数时候,这种继续模型能良好运作。可是,如果想让两个无关的PHP类具有类似的行为,该当怎么做呢?

Trait便是为理解决这种问题而出身的。Trait能把模块化的实现办法注入多个无关的类中,而且trait还能促进代码重用。
如何创建trait
PHP中trait的定义办法如下:
<?phptrait MyTrait{ //这里是trait的实现}
建议:建议与定义类和接口一样,一个文件只定义一个trait,这是良好实践。
trait的5种利用方法1、大略利用
<?phptrait first_trait{ function first_method() {/code here/} function second_method() {/code here/}}class first_class{//声明利用first_trait,用use关键字 use first_trait;}$obj = new first_class();$obj->first_method();$obj->second_method();
2、利用多个trait
<?phptrait first_trait{ function first_method() {/code here/}}trait second_trait{ function second_method() {/code here/}}class first_class{//多个trait之间用逗号分隔 use first_trait,second_trait;}$obj = new first_class();$obj->first_method();$obj->second_method();
3、trait之间的嵌套
<?phptrait first_trait{ function first_method() {/code here/}}trait second_trait{ use first_trait; function second_method() {/code here/}}class first_class{ use second_trait;}$obj = new first_class();$obj->first_method();$obj->second_method();
4、trait的抽象方法
在trait中声明须要实现的抽象方法,这样能使利用它的Class必须实现它
<?phptrait first_trait{ function first_method() {/code here/} abstract public function second_method();}class first_class{ use first_trait; function second_method() {/code here/}}
5、trait之间的冲突
多个Trait之间的冲突,可以利用insteadof操作符来明确指定利用冲突方法中的哪一个;还可以用as操作符将个中一个冲突的方法以另一个名称引入
<?phptrait first_trait{ function first_function() { echo "From Frist Trait";}}trait second_trait{ function first_function() { echo "From Second Trait";}}class first_class{ use first_trait,second_trait{ first_trait::first_function insteadof second_trait; second_trait::first_function as second_function;}}$obj = new first_class();$obj->first_function(); //输出:From Frist Trait$obj->second_function(); //输出:From Second Trait
好了,trait的用法你已经完备节制了,是不是完美的实现了多继续的功能呢,赶紧用起来吧。