从特质访问父魔法

时间:2014-10-21 23:58:40

标签: php traits magic-methods

我试图重新定义特征中魔法__set的行为。当我还想从特征访问父类自定义__set函数时,问题就出现了。

trait TestingTrait {


    public function __set($key, $value)
    {
        // Some stuff...

        parent::__set($key, $value);
        // self::__set($key, $value);
    }

}

class TestingClass {

    use TestingTrait;

}

$var = new TestingClass();
$var->value = 'some value';

一切都很完美,直到我还需要使用主类__set方法,因为它正在使用变量集做其他一些事情。

我已尝试使用self,但它会进入无限循环。有没有办法访问主类?

2 个答案:

答案 0 :(得分:2)

您应该像这样使用$this->

<?php

trait TestingTrait {


    public function __set($key, $value)
    {
        // Some stuff...
        $this->$key = 'proof that it is going through here: ' . $value;
    }

}

class TestingClass {

    use TestingTrait;

}

$var = new TestingClass();
$var->value = 'some value';

echo $var->value;

Output

proof that it is going through here: some value

答案 1 :(得分:0)

我不知道特征行为就好像它是代码的一部分直接复制/粘贴到类中。

PHP: Traits (Example 2)

无法通过父级访问主类,因为它实际上没有父级扩展。