2011-01-24 2 views
14

Ho una matrice di oggetti stdClass. Quando assegno uno a una variabile, non sta copiando la variabile ma facendo riferimento alla variabile originale. Il mio codice è simile al seguente:Come si crea in modo esplicito una copia di una variabile in PHP?

for ($i = 0, $len = count($rows); $i < $len; $i++) 
{ 
    $row = $rows[$i]; 
    echo $rows[$i]->games; 
    $row->games = 'test'; 
    echo $rows[$i]->games; 
} 

Il primo echo emette il valore normale, ma il secondo echo emette "test". Anche se sto impostando la proprietà su $row (che dovrebbe essere copiata), la sta effettivamente impostando sull'elemento originale dell'array.

Perché è questo e come si crea effettivamente una copia, in modo che la modifica della copia non modifichi l'originale?

risposta

37

Utilizzare la parola chiave clone.

$copy = clone $object; 

importante notare:

Quando un oggetto viene clonato, PHP 5 si esibirà una copia di tutte le proprietà dell'oggetto. Tutte le proprietà che sono riferimenti ad altre variabili, rimarranno riferimenti.

si tratta con un bel metodo magico:

Una volta che la clonazione è completa, se un metodo __clone() è definito, quindi __clone dell'oggetto appena creato() metodo sarà chiamato, per consentire tutte le proprietà necessarie che devono essere cambiate.