找回密码
 注册
首页 ≡≡网络技术≡≡ PHP语言 php中trait的使用

PHP php中trait的使用

灰儿 2022-7-6 08:30:40
1、php中的trait是啥?

看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

2、PHP版本要求:
php5.4开始引入trait,其目的就是在于减少代码的重复,增加代码的复用性。

3、trait的使用场景:
试想这样一种情况,当有一个方法需要在很多的类中使用时,该怎么处理?
通常一般的处理方式会是,写一个基础类,在基类中实现这个方法,然后所有类都继承这个基类。

这是一种处理方法,但不是最好的处理方式。通常采用继承的情况是:几个类具有很大的相似性。比如人作为一个基类,学生、工人、等继承“人”这个基类来扩展。

由此,trait的作用就出来了,trait 可以在多个类中使用。

4、trait如何使用:
引用PHP手册中的例子:

例子一
  1. <?php
  2. trait ezcReflectionReturnInfo {
  3.     function getReturnType() { /*1*/ }
  4.     function getReturnDescription() { /*2*/ }
  5. }

  6. class ezcReflectionMethod extends ReflectionMethod {
  7.     use ezcReflectionReturnInfo;
  8.     /* ... */
  9. }

  10. class ezcReflectionFunction extends ReflectionFunction {
  11.     use ezcReflectionReturnInfo;
  12.     /* ... */
  13. }
  14. ?>
复制代码

1、先声明一个trait;
2、在类中使用use将该trait引入。
是不是非常简单(手动逃)?需要注意的是trait的优先级。

5、trait的优先级

(敲黑板)从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

优先级:自身方法>trait的方法>继承的方法(就是这样子的。)

看例子
  1. <?php
  2. trait HelloWorld {
  3.     public function sayHello() {
  4.         echo 'Hello World!';
  5.     }
  6. }

  7. class TheWorldIsNotEnough {
  8.     use HelloWorld;
  9.     public function sayHello() {
  10.         echo 'Hello Universe!';
  11.     }
  12. }

  13. $o = new TheWorldIsNotEnough();
  14. $o->sayHello();//输出是 Hello Universe!
  15. ?>
复制代码

还有一点需要注意的是:多个trait的使用。
  1. <?php
  2. trait Hello {
  3.     public function sayHello() {
  4.         echo 'Hello ';
  5.     }
  6. }

  7. trait World {
  8.     public function sayWorld() {
  9.         echo 'World';
  10.     }
  11. }

  12. class MyHelloWorld {
  13.     use Hello, World;
  14.     public function sayExclamationMark() {
  15.         echo '!';
  16.     }
  17. }

  18. $o = new MyHelloWorld();
  19. $o->sayHello();
  20. $o->sayWorld();
  21. $o->sayExclamationMark();
  22. ?>
复制代码

总结:Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

附:以上是trait的基本使用,其还有几个比较高级的使用注意点,详细的使用方法可以参见PHP手册,这里给出链接:PHP手册中trait的使用!以上内容中的例子都是来自于该手册。

参考:
1. http://php.net/manual/zh/language.oop5.traits.php
2. http://laravelacademy.org/post/4281.html
3. http://www.jianshu.com/p/47f0cdbe9b2c
————————————————
原文链接:https://blog.csdn.net/lemony521/article/details/78322652

您需要登录后才可以回帖 登录 | 注册
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。