2010-07-13 12 views
17

Estoy trabajando en una base de código existente y obtuve un objeto con un atributo que comienza con un número, que puedo ver si llamo al print_r en el objeto.¿Cómo puedo acceder a un atributo de objeto que comienza con un número?

Digamos que es $Beeblebrox->2ndhead. Cuando intento acceder así, recibo un error:

Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

¿Cómo puedo obtener ese atributo?

+0

Sé que trabajas en el código existente, pero, para completar, quiero agregar que se debe evitar el uso de variables que obliguen a usar la sintaxis de llaves. El uso "normal" de nombres de variables es simplemente mejor conocido y más fácil de leer. –

+0

Acabo de [respondí] (http://stackoverflow.com/a/10333200/50079) una pregunta similar; si tiene problemas con un atributo que es ** todos los números **, encontrará la solución allí. – Jon

Respuesta

29

Qué tal esto:

$Beeblebrox->{'2ndhead'} 


En realidad, se puede hacer esto para casi cualquier tipo de variables - incluso para los que no son propiedades de la clase.

Por ejemplo, podría pensar en el nombre de una variable que contiene espacios; la sintaxis siguiente trabajo:

${"My test var"} = 10; 
echo ${"My test var"}; 

Aunque, obviamente, no sería capaz de hacer algo como esto:

$My test var = 10; 
echo $My test var; 


Ni idea de cómo está funcionando internamente, aunque ... Y después de un poco de búsqueda, no puedo encontrar nada sobre esto en el manual de PHP.

Lo único que puedo encontrar sobre {} y las variables está aquí: Variable parsing - pero no del todo relacionado con el tema actual ...


Pero aquí está un artículo que muestra un par de otras posibilidades, y va más allá de los ejemplos que he publicado aquí: PHP Variable Names: Curly Brace Madness

Y aquí hay otro que da algunas informaciones additionnal acerca de la forma en que esos son analizadas: PHP grammar notes

+0

Sí, eso es todo! ¡Respondiste antes de que pudiera! :) –

+0

más rápido por 10 segundos ^^ –

+0

Si desea explicar por qué esto funciona y es necesario (¿tal vez usted sepa más que yo?), Eso haría que esta página sea más útil e interesante. –

5

de hecho, me encontré ou Es la respuesta de un compañero de trabajo antes de preguntar esto, pero no pude encontrarlo en Google, así que quería publicarlo aquí en caso de que otros tengan el mismo problema.

puedo acceder a ese atributo de este modo:

$Beeblebrox->{'2ndhead'} 

En realidad no es legal tener un atributo o variable que comienza con un número, pero de alguna manera una referencia dinámica como esto lo hace posible. Parece una trampa extraña en el lenguaje para mí.

Cuestiones relacionadas