Trait特性

PHP5.4以后实现了一个新的代码复用的方法Trait,Trait为了减少单继承语言的限制,相对于传统继承增加了水平特性的组合,也就是说几个class之间不需要继承。

Trait不是类,不能被实例化,Trait中的代码可以使用use直接导入到类中,相当于把trait的代码复制到当前类中。

实例:

<?php
trait play
{
    public function football()
    {
        return 'trait foot ball';
    }
}

class sport
{
    // 使用use关键字使用trait play中的代码
    use play;
}
$o = new sport;
$o->football();

一、优先级

从基类继承的成员会被trait插入的成员覆盖,优先顺序:当前类成员 > trait类成员 > 基类成员

二、使用多个Trait

通过逗号分隔,在use声明列出多个Trait,可以都插入到一个类中。

<?php
trait playBall
{
    public function football(){}
}

trait playTools
{
    public function piano(){}
}

class sport extends ball
{
    use playBall, playTools;
}

三、冲突的解决

如果两个trait都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。

为了解决多个 trait 在同一个类中的命名冲突,需要使用 insteadof操作符来明确指定使用冲突方法中的哪一个。

以上方式仅允许排除掉其它方法,as 操作符可以为某个方法引入别名。注意,as 操作符不会对方法进行重命名,

也不会影响其方法。

<?php
trait playBall
{
    public function football(){}
}

trait playTools
{
    public function football(){}
}

class sport
{
    use playBall, playTools {
        // 用playTools中的football方法替换掉playBall中的football的方法
        playTools::football insteadof playBall;
        // 给playBall的football方法一个别名
        playBall::football as Ball;
    }
}

四、Trait与Trait的组合

Trait中也可以使用Trait,在Trait定义时可以使用一个或者多个Trait

trait playBall
{
    public function football()
    {
        return 'trait foot ball';
    }
}

trait playTools
{
    use playBall;

    public function piano()
    {
        return 'trait piano';
    }
}

另外,PHP中的use的用法:

  1. 命名空间
  2. 匿名函数
  3. Trait引用
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 众所周知,一直以来PHP和很多语言一样是单继承的语言,但是常常在编码过程中,我们需要在当前类中使用两个或两个...
    金星show阅读 5,865评论 0 3
  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 8,841评论 1 24
  • 写完《慈悲》之后,已经很久没有路内的消息。最近,路内出了本小说集《十七岁的轻骑兵》 ,于是迫不及待的买来大肆啃读一...
    herensi阅读 1,319评论 0 0
  • 《你凭什么自己不努力,还抱怨原生阶层》 陶瓷兔子的小木屋 2018.02.06 这是个一半的人以正确的方式做着错误...
    陶瓷兔子的小木屋阅读 4,578评论 7 8
  • 这一年 还要继续走着 只要不曾跌倒 这一年 诸事一件件去做 不贪多 这一年 对自己好一点 活的洒脱些 这一年 去了...
    樊小篱阅读 1,346评论 5 19

友情链接更多精彩内容