page contents

听说你还认为PHP是单继承语言,学会使用trait,完美实现多继承

什么是trait Trait是为类似PHP的单继承语言而准备的一种代码复用机制。Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。 Trait是PHP5.4.0起引入...

什么是trait

Trait是为类似PHP的单继承语言而准备的一种代码复用机制。Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。

Trait是PHP5.4.0起引入,它既像类又像接口。trait是类的部分实现,可以混入一个或多个现有的PHP类中。

Trait有两个作用表明类可以做什么(像是接口);提供模块化实现(像是类)。

为什么使用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();
听说你还认为PHP是单继承语言,学会使用trait,完美实现多继承

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的用法你已经完全掌握了,是不是完美的实现了多继承的功能呢,赶紧用起来吧。

  • 发表于 2020-02-22 13:40
  • 阅读 ( 503 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1312 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章