2012-08-23 15 views
8

En lugar de utilizarPHP dinámica de nombres de propiedad de objeto

$object->my_property 

quiero hacer algo como esto

$object->"my_".$variable 
+0

Una cosa a tener en cuenta es que, si bien puede usar variables dinámicas, a menudo es preferible ser explícito. Hace la refactorización más tarde más fácil para uno. Imagine que busca una propiedad llamada "my_cat", no la encontrará si se declara dinámicamente. – Revent

Respuesta

23

Use llaves, así:

$object->{'my_' . $variable} 
6

¿Qué tal esto:

$object->{"my_$variable"}; 

Supongo que this section de la documentación de PHP podría ser útil. En resumen, uno puede escribir cualquier expresión arbitraria dentro de las llaves; su resultado (una cadena) se convierte en un nombre de propiedad para ser direccionado. Por ejemplo:

$x = new StdClass(); 
$x->s1 = 'def'; 

echo $x->{'s' . print("abc\n")}; 
// prints 
// abc 
// def 

... sin embargo, por lo general es mucho más fácil de leer para almacenar el resultado de esta expresión en una variable temporal (que, por cierto, se puede dar un nombre significativo). De esta manera:

$x = new StdClass(); 
$x->s1 = 'def'; 

$someWeirdPropertyName = 's' . print("abc\n"); // becomes 's1'. 
echo $x->$someWeirdPropertyName; 

Como se ve, este enfoque hace que las llaves no es necesario y da un lector, al menos, alguna descripción de lo que compone el nombre de la propiedad.)

P.S. print se usa solo para ilustrar la complejidad potencial de la expresión del nombre variable; mientras que este tipo de código se usa comúnmente en las pruebas de certificación, es un gran 'no-no' usar tales cosas en la producción.)

+0

Gracias, si pudiera dar dos tics también tendrías uno. – user1209203

Cuestiones relacionadas