美文网首页
Trait特性

Trait特性

作者: 幽思片羽 | 来源:发表于2018-08-22 16:05 被阅读0次

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

相关文章

  • Rust impl trait

    trait特性 trait特性可以理解为Java中的接口,具备和接口很类似的特性。trait中的函数叫做方法。某个...

  • Trait特性

    PHP5.4以后实现了一个新的代码复用的方法Trait,Trait为了减少单继承语言的限制,相对于传统继承增加了水...

  • 那些永远记不住的单词| Trait 特性品质【127】

    Trait 英 [treɪt; treɪ] 美 [tret] n. 特性,特点;品质;少许 n. (Trait)...

  • php trait 特性

    trait 特性总结 : 使用关键字 : use / as / insteadof 属性: 不允许在继承的 tra...

  • 同义词整理

    人的特性,品质 character trait idiosyncrasy ['ɪdɪə(ʊ)'sɪŋkrəsɪ] ...

  • Adaptive Layout

    设备适配手段 Trait(设备特性)iOS 8+ UITraitEnvironment protocol(UISc...

  • MS-特性-Trait

    Trait (PHP5.4+) Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中。其作用有两个:...

  • PHP基础( php7新特性 )

    严格模式( 函数 ) 匿名类 trait 特性 上传文件参考地址 : https://www.cnblogs...

  • Laravel中的Trait特性

    相对于多继承语言(如C++),代码复用这个问题对于单继承类语言(如Ruby、PHP等)来说需要通过其他方法来解决,...

  • PHP Trait实现Singleton单例模式

    trait是从PHP 5.4开始就有的语法特性,与Mixin和Behaviors模式有相似之处。triat 突破了...

网友评论

      本文标题:Trait特性

      本文链接:https://www.haomeiwen.com/subject/venkvftx.html