Utilizzando SPLObjectStorage come mappa dei dati, puoi utilizzare un array mutabile come dati?

StackOverflow https://stackoverflow.com/questions/9380430

Domanda

Nel seguente codice:

$storage = new \SplObjectStorage();

$fooA = new \StdClass();
$fooB = new \StdClass();

$storage[$fooA] = 1;
$storage[$fooB] = array();

$storage[$fooA] = 2;
$storage[$fooB][] = 'test';

Mi aspetterei $storage[$fooA] essere 1, che è. Mi aspetterei anche $storage[$fooB] essere array('test'), cosa che non è. Ciò innesca anche un avviso che recita: "La modifica indiretta dell'elemento sovraccarico di SplObjectStorage non ha alcun effetto in ..."

Penso che ciò accada perché l'implementazione di ArrayAccess in SplObjectStorage non restituisce i valori per riferimento.

C'è un modo per usare SplObjectStorage Come mappa dei dati in cui le chiavi sono oggetti e valori sono array mutabili? Ci sono altre opzioni praticabili per fare questo tipo di lavoro?

È stato utile?

Soluzione

Modifica indiretta (cioè offsetGet Restituire un riferimento) è un'abilità recente. Vedere la nota per ArrayAccess::offsetGet. Non sembra che splObjectStorage ne faccia uso (ancora?).

Ti suggerisco invece di usare la modifica diretta:

$a = $storage[$fooB];
$a[] = 'test';
$storage[$fooB] = $a;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top