Trait特性

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

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

实例:

football();

一、优先级

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

二、使用多个Trait

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

三、冲突的解决

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

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

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

也不会影响其方法。

四、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引用

你可能感兴趣的:(Trait特性)