2010-02-23 19 views
7

Qual è la spiegazione della seguente sintassi?

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

Grazie per tutte le risposte! – eft

risposta

17

Si sta chiamando una proprietà su $var1 che ha lo stesso nome del valore di $var2.

Ad esempio:

$var2 = "name"; 

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

$var1 è un oggetto.

$var2 è (eventualmente) il nome di una variabile all'interno di $var1.

Se $var2="test"; questa viene valutata a:

$var1->test; 

Si può fare questo con ogni sorta di cose:

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

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

È possibile anche ottenere veramente fantasia:

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

Cosa sono i doppi simboli del dollaro? – CodyBugstein

+0

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

+0

Puoi includere un esempio di un get/post con un altro? –

2

E ' significa interrogare dinamicamente una proprietà in un oggetto.

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); 

così $var1 è un'istanza di un oggetto, -> indica l'accesso a un membro di quell'oggetto e $var2 contiene il nome di una proprietà.