次のコードでは:
$storage = new \SplObjectStorage();
$fooA = new \StdClass();
$fooB = new \StdClass();
$storage[$fooA] = 1;
$storage[$fooB] = array();
$storage[$fooA] = 2;
$storage[$fooB][] = 'test';
私はそうなることを期待$storage[$fooA]
します1
、それはそうです。私もそうなることを期待$storage[$fooB]
しますがarray('test')
、そうではありません。これにより、「SplObjectStorageのオーバーロードされた要素の間接的な変更は...に影響を与えません」という通知もトリガーされます。
ArrayAccess
これは、 inの実装がSplObjectStorage
参照によって値を返さないために発生すると思います。
SplObjectStorage
キーがオブジェクトで値が可変配列であるデータマップとして使用する方法はありますか?この種の作業を行うための他の実行可能なオプションはありますか?