Dans le code suivant:En utilisant SplObjectStorage comme carte de données, pouvez-vous utiliser un tableau modifiable comme donnée?
$storage = new \SplObjectStorage();
$fooA = new \StdClass();
$fooB = new \StdClass();
$storage[$fooA] = 1;
$storage[$fooB] = array();
$storage[$fooA] = 2;
$storage[$fooB][] = 'test';
Je pense $storage[$fooA]
d'être 1
, qu'il est. Je m'attendrais également $storage[$fooB]
à array('test')
, ce qui n'est pas le cas. Cela déclenche également un avis qui lit, « modification indirecte de l'élément de surcharge SplObjectStorage n'a aucun effet ... »
Je pense que cela se produit parce que la mise en œuvre de ArrayAccess
dans SplObjectStorage
ne retourne pas les valeurs de référence.
Est-il possible d'utiliser SplObjectStorage
comme une carte de données où les clés sont des objets et les valeurs sont des tableaux mutables? Y a-t-il d'autres options viables pour faire ce genre de travail?