2010-02-23 15 views
7

¿Cuál es la explicación para la siguiente sintaxis?

$var1->$var2 // Note the second $ 
+0

Gracias por todas las respuestas! – eft

Respuesta

17

Está llamando a una propiedad en $var1 que recibe el mismo nombre que el valor $var2.

Por ejemplo:

$var2 = "name"; 

// The following are equivalent 
$var1->name; 
$var1->$var2; 
9

$var1 es un objeto.

$var2 es (posiblemente) el nombre de una variable dentro de $var1.

Si $var2="test"; esto se evalúa a:

$var1->test; 

Usted puede hacer esto con todo tipo de cosas:

$test = array(); 
$name="test"; 
print_r($$name); // Prints array(); 

$test = new stdClass; 
$test->hello = "hi"; 
$name2="hello"; 
echo $test->$name2; // Echos hi 

Incluso, pueden obtener realmente de lujo:

echo $$name->$name2; // Echos hi 
+1

¿Qué pasa con los signos dobles de dólar? – CodyBugstein

+0

@Imray http://php.net/manual/en/language.variables.variable.php –

+0

¿Puedes incluir un ejemplo de un get/post con un else? –

2

Se significa consultar dinámicamente una propiedad en un objeto.

class A { 
    public $a; 
} 

// static property access 
$ob = new A; 
$ob->a = 123; 
print_r($ob); 

// dynamic property access 
$prop = 'a'; 
$ob->$prop = 345; // effectively $ob->a = 345; 
print_r($ob); 

así $var1 es una instancia de un objeto, -> significa el acceso a un miembro de ese objeto y $var2 contiene el nombre de una propiedad.