1

我的代码遇到了一个我无法解释的问题。我唯一能想到的是魔法方法在 ArrayObjects 中不起作用。例如,给定以下类:

class foo extends ArrayObject {

    public $bar = '@@@';

    public function __construct() {
        parent::__construct(array(), ArrayObject::ARRAY_AS_PROPS);
    }

    public function __get($prop) {
        return '@@@';
    }
}

以下几行给了我一个错误“注意:未定义的索引:测试......”

$foo = new foo();
echo $foo->test;

然而这些行工作正常:

$foo = new foo();
echo $foo->bar;

我疯了还是这是一个已知问题?

4

1 回答 1

3

您正在寻找的“魔术”功能称为offsetGetDocs,而不是__get

class foo extends ArrayObject {

    public $bar = '@@@';

    public function __construct() {
        parent::__construct(array(), ArrayObject::ARRAY_AS_PROPS);
    }

    public function offsetGet($prop)
    {
        if (!parent::offsetExists($prop))
            return '@@@';
        return parent::offsetGet($prop);
    }
}

$foo = new foo();
echo $foo->test; # @@@

我不确定,但__get由于您从一个以某种方式阻止它的内部类扩展,所以它不可用。

于 2011-11-05T12:17:33.650 回答