Несколько логических условий - приоритет оператора - PullRequest
4 голосов
/ 15 ноября 2011

Я обнаружил строку кода, которая выглядит следующим образом:

if ($users == 'all' || $_POST['user'] == 1 && $users == 'admins' || $_POST[ 'user' ] == 0 && $users == 'mods') ...

Я не понимаю, как выполняются все эти условия, потому что между ними нет скобок: (

Является ли || более важным, чем &&? Какие части оцениваются первыми?

Ответы [ 3 ]

9 голосов
/ 15 ноября 2011

Конечно, порядок операторов четко определен, как и в любом приличном языке программирования.

См. эту ссылку .

8 голосов
/ 15 ноября 2011

&& зависит от оценки правильного выражения, || - нет.Вы можете переписать его так:

if(
    $users == 'all' ||
    ($_POST['user'] == 1 && $users == 'admins') ||
    ($_POST[ 'user' ] == 0 && $users == 'mods')
)

И оно будет таким же.

1 голос
/ 15 ноября 2011

Без круглых скобок PHP будет оценивать каждое выражение слева направо, используя PHP приоритет оператора . Однако, как и при любой логической проверке, добавление AND в микс может привести к путанице и затруднить чтение.

...