0

如果要更改的变量在抽象类中声明,是否有办法在抽象类中执行 __set 方法,如果要更改的变量属于扩展抽象类的类,则运行不同的 __set。我确定我会以错误的方式解决这个问题,任何帮助将不胜感激。

abstract class abstract_class {
    protected $protected_var;

    function __set($name, $value)
    {
        echo "abstract __set";
    }
}

class regular_class extends abstract_class {
    private $temp;

    function __set($name, $value)
    {
        echo "regular __set";
    }
}

$class = new regular_class();
$class->protected_var = "value";

在上面的示例中,我希望输出“abstract __set”而不是输出“regular __set”。

4

1 回答 1

2
class Base
{
    protected $a = "a";

    public function __set($name, $value)
    {
        echo "base";
    }
}

class Child extends Base
{
    private $b = "b";
    public function __set($name, $value)
    {
        if (property_exists(get_parent_class(), $name))
            parent::__set($name, $value);
        else
            echo "child";
    }
}

$obj = new Child();

$obj->a = 1;
$obj->b = 1;

这是解决方案

请记住,总是当您创建任何类的子类并想要重载 __set 时,您需要首先检查属性是否在父类中,否则它将无法正常工作

于 2013-08-04T22:18:21.667 回答