В чем объясняется следующий синтаксис?
$var1->$var2 // Note the second $
Вы вызываете свойство в $var1
, имя которого совпадает с значением $var2
.
Например:
$var2 = "name"; // The following are equivalent $var1->name; $var1->$var2;
$var1
– это объект.
$var2
– это (возможно) имя переменной внутри $var1
.
Если $var2="test";
это оценивается так:
$var1->test;
Вы можете сделать это со всеми вещами:
$test = array(); $name="test"; print_r($$name); // Prints array(); $test = new stdClass; $test->hello = "hi"; $name2="hello"; echo $test->$name2; // Echos hi
Вы даже можете по-настоящему представить:
echo $$name->$name2; // Echos hi
Это означает динамический запрос свойства в объекте.
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);
поэтому $var1
является экземпляром некоторого объекта, ->
означает доступ к члену этого объекта, а $var2
содержит имя свойства.