Diverse istanze sulla deserializzazione di oggetti php?

-1

Supponiamo di avere una classe chiamata MyClass, con una variabile membro 'var'. E il seguente scenario:

echo '<pre>';
$x=new MyClass;
$y=new MyClass;
$x->var=$y;
echo 'Checking for $x->var===$y :'.($x->var===$y).PHP_EOL; // outputs 1

$xs=serialize($x);
$ys=serialize($y);

$xsu=unserialize($xs);
$ysu=unserialize($ys);
echo 'Checking for $xsu->var===$ysu :'.($xsu->var===$ysu); //outputs nothing

Dopo la serializzazione e la de-serializzazione, le istanze sono diverse.
Il runtime di php crea un oggetto diverso e lo rende non serializzato. Non dovrebbe guardare qualche hash dell'oggetto e restituire il riferimento allo stesso oggetto (dopo la de-serializzazione una volta). Il mio qs. è quali potrebbero essere gli svantaggi?

Modifica: Ho bisogno di riferimenti identici a causa del seguente motivo dichiarato in 2 punti: (Correggere se ho torto)
Gli oggetti possono essere serializzati su disco in un singolo file per progetto di oggetto. 1. Il loro nome file può essere restituito come stringa di riferimento dal metodo serialize (). Durante la deserializzazione, il file può essere letto dal disco e l'oggetto manipolato.
2. Quindi, ora se ottengo riferimenti identici, le eventuali modifiche apportate a una si rifletteranno nell'altra, il che non potrebbe essere il caso se i riferimenti sono diversi. Alla fine, la singola entità potrebbe essere salvata sul disco.

    
posta Praveen 29.03.2016 - 16:27
fonte

1 risposta

1
  • Per ottenere qualcosa del genere, il runtime dovrà tenere traccia di tutti gli oggetti in alcune tabelle e cercare e & aggiorna questa tabella ogni volta che crea un oggetto. Questo costo è alto e il vantaggio è non molto chiaro.

  • Man mano che gli stati interni di ogni oggetto cambiano, il comportamento non sarà facile da capire quando si deserializza i dati di un oggetto che è stato serializzato in spaziotempo diversi.

  • È possibile ottenere questo comportamento specifico sovrascrivendo __sleep () e __wakeup () e non modificando il runtime di php.
  • Compatibilità.
risposta data 30.03.2016 - 17:13
fonte

Leggi altre domande sui tag