2011-09-05 34 views
5

me pregunto cómo puedo cambiar el nombre de una propiedad de objeto en PHP, por ejemplo:PHP - ¿Cómo cambiar el nombre de una propiedad del objeto?

<?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 

No funciona en PHP5.3, (donno acerca de las versiones anteriores), ya que habrá una referencia de $obj->a asignado a $obj->b y por lo que al desactivar $obj->a, el valor de $obj->b será nulo. Alguna idea, por favor?

+1

PHP versión 5.3.4 después de ejecutar el código $ obj: objeto (stdClass) # 1 (1) {[ "b"] => int (10)} – Fivell

+2

No es una referencia. Ver [esta respuesta] (http://stackoverflow.com/questions/3611986/in-php-can-someone-explain-cloning-vs-pointer-reference/3612129#3612129) para detalles sobre los manejadores de PHP que escriben variables y referencias. .. – ircmaxell

Respuesta

5

Su código funciona correctamente, $obj->b es 10 después de la ejecución: http://codepad.org/QnXvueic

cuando saques tu $obj->a, que acaba de quitar la propiedad, no toca al valor. Si el valor es utilizado por otra variable, no se modifica en la variable de orden.

+0

Eso es práctico. Ahorra tener que hacer reflejos y otras cosas elegantes como en otros idiomas. –

+0

gracias! está escrito por qué obtengo NULL después de desarmar una propiedad = 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

No es un cambio de nombre, es una copia. ocupará el doble de la memoria de -> a. Solo decir que el "cambio de nombre" suele ser solo algo importante para los desarrolladores que manejan grandes conjuntos de datos. – John

Cuestiones relacionadas