2011-09-05 14 views
5

Mi chiedo come posso rinominare una proprietà dell'oggetto in PHP, ad esempio:PHP - Come rinominare una proprietà dell'oggetto?

<?php 
    $obj = new stdclass(); 
    $obj->a = 10; // will be renamed 
    $obj->b = $obj->a; // rename "a" to "b", somehow! 
    unset($obj->a); // remove the original one 

Non funziona in PHP5.3, (Donno sulle versioni precedenti), in quanto ci sarà un punto di riferimento di $obj->a assegnato a $obj->b e pertanto, disattivando $obj->a, il valore di $obj->b sarà nullo. Qualche idea per favore?

+1

PHP versione 5.3.4 dopo aver eseguito il codice di $ obj: oggetto (stdClass) # 1 (1) {[ "b"] => int (10)} – Fivell

+2

Non è un riferimento. Vedi [questa risposta] (http://stackoverflow.com/questions/3611986/in-php-can-someone-explain-cloning-vs-pointer-reference/3612129#3612129) per i dettagli sugli handle PHP che scrivono variabili e riferimenti. .. – ircmaxell

risposta

5

Il tuo codice funziona correttamente, è $obj->b10 dopo l'esecuzione: http://codepad.org/QnXvueic

quando si torna dall $obj->a, basta rimuovere la proprietà, non si tocca il valore. Se il valore è utilizzato da un'altra variabile, non viene modificato nella variabile dell'ordine.

+0

Questo è utile. Si risparmia dover fare riflessioni e altre cose di fantasia come in altre lingue. –

+0

grazie! è stanco perché ottengo NULL dopo aver disattivato una proprietà = O –

0
<?php  
$obj = new stdclass(); 
$obj->a = 10; // will be renamed 
$obj->b = $obj->a; // rename "a" to "b", somehow! 
unset($obj->a); // remove the original one 
var_dump($obj->b); //10 Works fine 
+0

Questo non è un rinominare, è una copia. Occuperà il doppio della memoria di -> a. Solo dicendo che "rinominare" è spesso solo qualcosa di importante per gli sviluppatori che gestiscono dataset di grandi dimensioni. – John