Приоритет и значение! оператор в PHP - PullRequest
0 голосов
/ 16 января 2019

В PHP doc сказано, что оператор! имеет более высокий приоритет, чем любые другие логические или любые операторы сравнения.

Я создал 3 условия:

$x = 4; $y = -12; 

if(!$x >= 0 AND !$y >= 0)){echo '1/ Validated';}
if(!($x >= 0) AND !($y >= 0)){echo '2/Validated';}
if(!($x >= 0 AND $y >= 0)){echo '3/Validated';}

Первый, если эхо подтверждено, второй - нет, а третий -.

Я просто не понимаю, почему первое эхо подтверждено. Насколько я понимаю, здесь сравниваются сравнения $ x> = 0 и $ y> = 0 (истина и ложь для начала), а затем результат инвертируется, что делает его ложным и истинным, и мы НАКОНЕЦ имеем if (false AND true) и код внутри if не должен быть выполнен.

Полагаю, я ошибаюсь из-за способности "!" оператор или на приоритет, но я не могу понять, где.

Может кто-нибудь уточнить, пожалуйста?

1 Ответ

0 голосов
/ 16 января 2019

! имеет более высокий приоритет, чем >=, так что это:

if(!$x >= 0 AND !$y >= 0)

Оценивается так:

if(((!$x) >= 0) AND ((!$y) >= 0))

Т.е., !$x оценивается до >=.

Итак, имеем:

  • $x = 4
  • !$x оценивается как ложное (4 оценивается как истинное значение bool, затем инвертирует его)
  • (!$x) >= 0 оценивается как истина (ложь с предыдущего шага, оцениваемого как int, равно 0)
  • $y = -12
  • !$y оценивается как ложное (-12 оценивается как истинное значение bool, затем инвертирует его)
  • (!$y) >= 0 оценивается как истина (ложно с предыдущего шага, оцениваемого как int, равно 0)
  • !$x >= 0 AND !$y >= 0 оценивается как true AND true, что верно
...