W poniższym kodzie:Używając SplObjectStorage jako mapy danych, czy możesz użyć tablicy zmiennych jako danych?
$storage = new \SplObjectStorage();
$fooA = new \StdClass();
$fooB = new \StdClass();
$storage[$fooA] = 1;
$storage[$fooB] = array();
$storage[$fooA] = 2;
$storage[$fooB][] = 'test';
spodziewałbym $storage[$fooA]
być 1
, co to jest. Oczekuję też, że $storage[$fooB]
będzie array('test')
, którego nie ma. To wyzwala również zawiadomienie, że czyta „Pośrednia zmiana przeciążonej element SplObjectStorage ma wpływ na ...”
myślę, że to się dzieje, ponieważ realizacja ArrayAccess
w SplObjectStorage
nie zwraca wartości przez odniesienie.
Czy istnieje sposób użycia SplObjectStorage
jako mapy danych, gdzie klucze są obiektami, a wartości są tablicami, które można zmieniać? Czy są jakieś inne opłacalne opcje wykonywania tego rodzaju pracy?