在课堂上使用特质,为什么?

时间:2013-03-01 18:38:37

标签: php traits

这是课程的方式吗?

Class Main 
{
    $this->a = new A();
    $this->b = new B();
    $this->c = new C();

    $this->b->doTranslate($this->a->saySomething());
}

这就是特质是如何做到的,不是吗?

Class Main {
    use A;
    use B;
    use C;

    $this->doTranslate($this->saySomething());
}

我根本没有太多关于特征的知识,但通过查看新的PHP 5.4特征示例,它们似乎只对单个案例有所帮助。 A class only be extended once to use $this together, but we can use multiple traits.

问题1:使用特征优于基本类的唯一优势是什么?

问题2:如果trait A, B, and C都有一个名为example()的函数,当我尝试$this->example();时,PHP将如何确定将使用哪个特征?会发生什么事?

此外,不是写一面文字;只是给我一个简短的代码示例,简短的简介,我可以看看和承担。我不熟悉特质,也不知道它们到底是什么。

2 个答案:

答案 0 :(得分:4)

你可以用特质做很多事情。我在我的框架中使用它,例如Singleton和Getter / Setter。

trait Singleton
{
    protected static $_instance;

    protected function __construct(){}

    public static function getInstance()
    {
        if (null === self::$_instance) {
            self::$_instance = new static();
        }
        return self::$_instance;
    }
}

另一个有趣的用途是面向方面编程。 答案是长期解释。看看herehere

问题2:如果特征具有相同的方法,则会出现致命错误。 您必须使用insteadof运算符来解决冲突。 看here

答案 1 :(得分:0)

特质是一种在PHP等单一继承语言中重用代码的机制。特性旨在通过使开发人员能够在生活在不同类层次结构中的几个独立类中自由重用方法集,从而减少单一继承的某些限制。从5.4开始,PHP就可以使用特性。特质是一个使用trait关键字而不是class的PHP文件。特质优于类和继承的好处之一是可以在一个类中使用多个特质。有时将它与PHP不支持的多重继承进行比较。

特性类似于类,但仅用于以细粒度且一致的方式对功能进行分组。无法单独实例化特性。它是对传统继承的补充,可以实现行为的横向组合;也就是说,类成员的应用无需继承。

从此处What are traits in PHP ?

阅读全文