1

説明できないコードの問題に遭遇しました。私が考えることができる唯一のことは、魔法のメソッドは ArrayObjects 内では機能しないということです。たとえば、次のクラスがあるとします。

class foo extends ArrayObject {

    public $bar = '@@@';

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

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

次の行で、「Notice: Undefined index: test ...」というエラーが表示されます。

$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 に答える