Php,特征链中调用碰撞(魔法)方法,如何?

时间:2016-10-21 11:00:46

标签: php traits

trait A
{
    function __get($name)
    {
    }
}

trait B
{
    function __get($name)
    {
    }
}

trait C
{
    function __get($name)
    {
    }
}

class D
{
    use A, B, C;

    function __get($name)
    {
        // it may also have magic method
    }
}

我想调用所有4种__get()方法,这是可行的吗?我看到我可以重命名方法,但它更像是从A,B,C中选择一种方法,但我需要所有方法

1 个答案:

答案 0 :(得分:1)

如果不重命名导入的__get方法,则无法实现。

请参阅有关此问题的PHP文档:PHP: Traits - Conflict Resolution

class D
{
    use A, B, C {
        A::__get as private __getA;
        B::__get as private __getB;
        C::__get as private __getC;
    }

    function __get($name)
    {
        $this->__getA($name);
        $this->__getB($name);
        $this->__getC($name);
    }
}

(我已将该类重命名为 D ,因为您无法在一个命名空间中拥有特征和类名。)