LINUX.ORG.RU

PHP: операторы сравнения и назначения

 


0

1

Операторы сравнения в PHP (==, !=, === etc.) имеют больший приоритет, чем оператор назначения (=).

$a = 2;
$b = 5;
$a = $b == $a; // $a = false; все правильно
$a == $b = $a; // должно быть false = $a, затем ошибка, но все получается будто $a == ($b = $a);

В чем проблема?

в приоритете исполнения операторов, это как * и +.

wwwsevolod
()

$a == $b = $a;

Как ты себе представляешь ($a == $b) = $a; ? В языке без lvalue-результата оператора ==?

$ python
Python 3.2.3 (default, Jul 22 2012, 23:33:58) 
[GCC 4.5.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a=2
>>> b=5
>>> a==b = a
  File "<stdin>", line 1
SyntaxError: can't assign to comparison

Другое дело, что в PHP не посчитали такое выражение ошибочным. Но как его, вообще, в здравом уме написать можно?

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

В том то и дело что оно написано «не в здравом уме» специально чтобы получить ошибку, но ошибки нет.

Graduate
() автор топика
Ответ на: комментарий от Graduate

В том то и дело что оно написано «не в здравом уме» специально чтобы получить ошибку, но ошибки нет.

«Я прострелил себе ногу гранатомётом, гранатомёт такой плохой! Но я-то ведь специально это сделал, но правда ничего не почувствовал, хоть и вижу отсутствие ноги».

resurtm ★★★
()

В ограниченном ресурсе 0x0D 0x0А в Вашем редакторе, так понимаю.

ilovewindows ★★★★★
()

Книга «Фрактал плохого дизайна» откроет тебе глаза на то, что это нормально.

GateKeeper ★★
()

Операторы сравнения в PHP (==, !=, === etc.) имеют больший приоритет, чем оператор назначения (=)

ORLY?

moscwich
()
Ответ на: комментарий от KRoN73

Но как его, вообще, в здравом уме написать можно?

Скорее всего это идёт именно из порядка команд, чтобы можно было сделать так:

echo $a = 'something';

и скорее всего, распространяется на все полностью, без ограничений. Хотя действительно, на оправдание не тянет.

alexmaru
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.