Сокращенный синтаксис PHP к операторам AND - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь реализовать логическое связующее И, и мне было интересно, разрешена ли эта сокращенная запись:

$hasPermissions &= user_hasAppPermission($user_id, $permission);

Или я должен сделать это:

$hasPermissions = $hasPermissions && user_hasAppPermission($user_id, $permission);

Ответы [ 3 ]

5 голосов
/ 11 января 2012

Сокращение &= является побитовой операцией присваивания , которая не эквивалентна вашему второму утверждению. Это было бы то же самое, что и делать (обратите внимание на один амперсанд):

$hasPermissions = $hasPermissions & user_hasAppPermission($user_id, $permission);

Из того, что я вижу, ваше "длинное" высказывание выглядит вполне нормально.

1 голос
/ 11 января 2012

В PHP доступны следующие логические операции :

И

$val1 && $val2
$val1 and $val2

ИЛИ

$val1 || $val2
$val1 or $val2

НЕ

! $val

XOR

$val1 xor $val2

Дополнительно, посмотрите на эту страницу .Два оператора && и || имеют различный приоритет как and и or.

Таким образом, ваш второй вариант - это путь, по которому нужно идти:

$hasPermissions = $hasPermissions && user_hasAppPermission($user_id, $permission);

Кстати: я бы предложил всегда использовать === для сравнения на равенство .=== гарантирует, что типы его операндов идентичны, а значения равны, в то время как == сбрасывает значения.

0 голосов
/ 11 января 2012

Я бы сделал что-то вроде:

$hasPermissions = (($hasPermissions) && (true === user_hasAppPermission($user_id, $permission))) ? true : false;
...