Является ли $ оператором в php?

Я занимаюсь разработкой парсера PHP и столкнулся с таким вот неоднозначным вопросом.


Как известно, официальной спецификации языка просто не существует. На оф. сайте в таблице приоритета операций значок $ отсутствует.


Тем не менее в языке валидны выражения вида

<?php
function testMe($a) {
  //do something
}

$func = 'testMe';

$func(21);



Более того, в следующем примере будет напечатано 15 (php 5.3.8)
<?php

$myVar = 14;
$t = 'myVar';
$$t += 1;
echo $myVar;



Каково ваше мнение, можно ли $ считать оператором?
  • Вопрос задан
  • 2525 просмотров
Пригласить эксперта
Ответы на вопрос 9
gaelpa
@gaelpa
Не пробовали смотреть в сурцах зендовского парсера пхп?
Может там найдется более точный ответ.
Ответ написан
@edogs
Не оператор.
По поводу синтаксиса любопытно иногда заглядывать в ru2.php.net/manual/en/tokens.php
Ответ написан
@Bodigrim
Похоже, что валидны не только конструкции типа $$var, но и более сложные. Например, следующий код выводит 1111.
<?php

$a=1;
echo $a;

$b="a";
echo $$b;

$c="b";
echo $$$c;

$d="c";
echo $$$$d;

?>
Ответ написан
@rPman
нет, потому как тогда будут валидны следующие конструкции:
$($a)
Ответ написан
MTonly
@MTonly
Веб-разработчик с 2002 года
Комментировать
taliban
@taliban
php программист
Это не оператор, это «начало» переменной, и так же конструкции типа $$ означают (грубо говоря) переменная в имени переменной и предусмотрены создателяпи языка изначально, так же как и {} — банально выделяет переменную из строки, хотя и без строк работает.
Ответ написан
Комментировать
Хотя по функциям он близок к оператору разыменования указателя, считать его оператором нельзя. Просто элемент синтаксиса имени переменной.
Ответ написан
Комментировать
ngreduce
@ngreduce
Оператор что-либо делает.
Например echo выводит, require включает.

$ и $$ просто показывают интерпретатору как надо обращать с той или иной переменной.

НО
www.php.net/manual/en/language.operators.php

The variable symbol '$' should be considered as the highest-precedence operator, so that the variable variables such as $$a[0] won't confuse the parser.
Ответ написан
Можно считать как оператор с высшим приоритетом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы