2010-01-19 20 views
11

Tengo un objeto PHP con un atributo que tiene un signo de dólar ($).¿Cómo accedo a un atributo de objeto PHP que tenga un signo de dólar?

¿Cómo accedo al contenido de este atributo?

Ejemplo:

echo $object->variable; // Ok 

echo $object->variable$WithDollar; // Syntax error :-(
+0

Intenta hacer esto primero: 'vardump ($ object);', luego examina el resultado. –

+2

Si proviene de una consulta SQL, quizás deba cambiar el nombre de ese campo en el SQL (es decir, 'seleccione la variable $ conDollar como varwithoutdollar'). – JAL

+0

@ Código Pato: Sí, podría haberlo hecho, eso es lo que hice hasta ahora, estaba tratando de averiguar si era posible directamente en PHP. – kevin

Respuesta

37
  1. Con variable variables:

    $myVar = 'variable$WithDollar'; 
    echo $object->$myVar; 
    
  2. Con llaves:

    echo $object->{'variable$WithDollar'}; 
    
+0

¿con variables de cadena? –

+0

No, variables variables es el término correcto. Pero $ es ilegal en nombres de variable ... –

+1

@ Jan, eso no cambia el hecho de que puede obtener una variable o una propiedad con $ en el nombre ... – nickf

3

Supongo que desea acceder a propiedades con nombres de variables sobre la marcha. Para eso, intente

echo $object->{"variable".$yourVariable} 
+1

No los estoy creando, son el resultado de una consulta SQL. Eso no es lo que trato de hacer. – kevin

+0

Puedes hacerlo. Intenta esto: '$ x = 'a $ b'; $$ x = 'foo'; print_r (get_defined_vars()); ' – nickf

+0

@nickf: Buen punto, eliminado. –

1

Existen métodos de reflexión que también le permiten construir nombres de métodos y atributos que se pueden compilar por variables o contener caracteres especiales. Puede usar el método ReflectionClass :: getProperty (string $ name).

$object->getProperty('variable$WithDollar');

+2

tendrías que usar comillas simples allí. – nickf

1

no lo hacen.

El signo de dólar tiene un significado especial en PHP. Aunque es posible eludir la sustitución de variables en la desreferenciación de las propiedades de clases/objetos, NUNCA debería estar haciendo esto.

No intente declarar variables con un literal '$'.

Si tiene que lidiar con el desastre de alguien, primero corrija el código que escribió para eliminar los dólares, luego vaya y corte sus dedos.

C.

+1

Parte del software que ejecuta principalmente la base de datos tiene 20 años. Créame, me encantaría tener solo nombres de columnas legibles (y no AF $ AT1, por ejemplo), me estoy comunicando con la base de datos y no puedo cambiar nada en ella. – kevin

3

Gracias a sus respuestas, acabo de descubrir cómo puedo hacer que la forma en que pretende:

echo $object->{'variable$WithDollar'}; // works ! 

yo estaba bastante seguro de que intentado todas las combinaciones posibles antes.

Cuestiones relacionadas