请选择 进入手机版 | 继续访问电脑版
绿茶科技社区

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本篇文章主要介绍了PHP中trait使用方法,个人觉得挺不错的,现在分享给大家,也给大家做个参考。一起过来看看吧。下面开始正文。
说通俗点,PHP中使用trait关键字是为了解决一个类既想集成基类的属性和方法,又想拥有别的基类的方法,而trait一般情况下是和use搭配使用的。请看下面的示例代码
  1. <?php

  2.     header("Content-type:text/html;charset=utf-8");

  3.     trait Drive {                      //使用trait 创建一个基类

  4.     public $carName = 'trait';         //定义一个变量

  5.     public function driving() {        //定义一个方法

  6.     echo "driving {$this->carName}<br>";

  7.         }

  8.     }

  9.     class Person {                    //创建一个基类

  10.         public function eat() {         //定义一个方法

  11.             echo "eat<br>";

  12.             }

  13.     }

  14.     class Student extends Person {    //创建一个子类继承Person类

  15.         use Drive;                      //使用trait定义的类Drive

  16.         public function study() {        //定义一个方法

  17.             echo "study<br>";

  18.             }

  19.     }

  20.     $student = new Student();     //创建对象

  21.     $student->study();            //调用自己定义的方法

  22.     $student->eat();              //调用父类方法

  23.     $student->driving();          //调用trait定义的类Drive的方法

  24. ?>
复制代码
运行效果图如图所示
上面的例子中,Student类通过继承Person,有了eat方法,通过组合Drive,有了driving方法和属性carName。
如果Trait基类本类中都存在某个同名的属性或者方法,最终会保留哪一个呢?
  1. <?php

  2.     header("Content-type:text/html;charset=utf-8");

  3.         trait Drive {                  //使用trait定义一个类

  4.         public function hello() {    //定义一个方法

  5.             echo "我是trait类的方法hello()<br>";

  6.         }

  7.         public function driving() {

  8.             echo "我是trait类的方法driving()<br>"; //定义一个方法

  9.         }

  10.     }

  11.     class Person {                //创建父类

  12.         public function hello() {    //定义一个方法

  13.             echo "我是父类的方法hello()<br>";

  14.         }

  15.         public function driving() {      //定义一个方法

  16.             echo "我是父类的方法driving()<br>";

  17.         }

  18.     }

  19.     class Student extends Person {         //创建子类继承Person类

  20.         use Drive;                           //使用trait定义的类Drive

  21.         public function hello() {             //定义一个方法

  22.             echo "我是子类的方法hello()<br>";

  23.         }

  24.       }

  25.     $student = new Student();            //创建对象

  26.     $student->hello();                    //调用hello方法

  27.     $student->driving();                  //调用deiving方法

  28. ?>
复制代码
运行效果如图所示
因此得出结论:当方法或属性同名时,当前类中的方法会覆盖 trait的 方法,在这个例子中也就是student的hello()方法覆盖了trait中的hello()方法。而 trait 的方法又覆盖了基类中的方法。在这个例子中,trait的driving()方法就是覆盖了Person类中driving()方法。

分享到 :
0 人收藏

3 个回复

倒序浏览
ok_0066  高级会员 | 2019-11-15 06:43:36
纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下
王清培  高级会员 | 2019-12-8 10:12:31
众里寻他千百度,蓦然回首在这里!
施杨  金牌会员 | 2019-12-13 10:55:58
前排支持下了哦~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

举报|Archiver|手机版|小黑屋|Lvchakeji Inc.  

Powered by Discuz! X3.3 © 2001-2016 Comsenz Inc.

返回顶部