Является ли ключевое слово "and" таким же, как если бы (TRUE) в PHP - PullRequest
0 голосов
/ 08 мая 2018

Внутри модельного класса Laravel 5 я наткнулся на следующий код, который я не уверен, что он означает.

$query = User::query();

\Request::input('name') and $query->where('name', 'like', '%' . \Request::input('name') . '%');
\Request::input('email') and $query->where('email', 'like', '%' . \Request::input('email') . '%');

return $query->paginate(15);

Это то же самое, что и следующий код?

if (\Request::input('name')) {
    $query->where('name', 'like', '%' . \Request::input('name') . '%');
}

if (\Request::input('email')) {
    $query->where('email', 'like', '%' . \Request::input('email') . '%');
}

1 Ответ

0 голосов
/ 08 мая 2018

Это оценка короткого замыкания . Операторы PHP && и and в основном одинаковы (за исключением приоритета, который мы можем игнорировать здесь). Все логические операторы работают с оценкой короткого замыкания; то есть 0 and 1 никогда не может быть true, потому что 0 равно falsey , поэтому PHP даже не нужно оценивать второй операнд 1. Практически все языки делают это.

Здесь это используется как сокращение if. Если \Request::input('name') верно, второй операнд $query->... будет оценен, в противном случае он будет пропущен.

Это стилистически сомнительно и вряд ли одобрено, не в последнюю очередь потому, что оно порождает такие вопросы. Вам просто нужно написать традиционный if, его легче понять, и нет недостатка в линиях, которые вам нужно сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...