php中trait的使用

举报
lxw1844912514 发表于 2022/03/27 03:19:59 2022/03/27
【摘要】 1、php中的trait是啥? 看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。 2、PHP版本要求: php5.4开始引入trait,其目的...


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

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100028734

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。