2017-01-20 10 views
1

Это скорее вопрос «почему это работает» и «почему и почему не использовать его».PHP «Ternary Like» Булевое выражение Любопытство

Мы все знаем PHP выражения, используя тройные операции

$var = (isset($i) ? true:false); 

Но в PHP что-то вроде следующих работ тоже. (Это не тройная, 3 части, больше бинарной операции, 2parts.)

$var = true; 
isset($i) || $var = false; 

Что может быть не так практично :), но более полезным строительство

isset($i) || exit(); 

Так выше (намного лучше выглядит имо) будет иметь тот же результат, как

if(!isset($i)) exit(); 

Но кроме общего

defined('CONSTANT') || define('CONSTANT','FOO'); 

Я редко вижу этот тип конструкции, используемый в PHP. Почему это работает? Как это называется. Почему его не учат и не используют больше. Есть ли недостатки в его использовании? И есть ли практические способы использования && таким же образом?

+0

FYI, '$ var = (isset ($ i)? True: false);' является просто свернутым синонимом для '$ var = isset ($ i);' –

+1

его называют «логическим» или «. и это лениво - это означает: если первая часть верна, то нет необходимости * оценивать вторую часть, потому что результат всегда * будет * истинным. аналогично и: вторая часть будет оцениваться только в том случае, если первая часть верна. для получения дополнительной информации: см. ** [руководство] (https://secure.php.net/manual/en/language.operators.logical.php) ** –

+0

@ Alvaro Right. это был просто пример троичного строительства. – skribe

ответ

1

Этот способ написания операторов также существует на языках C, Perl и других языках, он воспроизводит то, как компилятор оценивает операторы, закодированные логическими операторами.

Представьте, что у вас есть выражение if (a() or b()), а затем, когда a() возвращает true, вам не нужно оценивать b(), потому что все утверждение истинно уже. Таким образом, b() вызывается только тогда, когда a() является ложным. Вы можете написать это без if, он все равно работает так же.

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

 Смежные вопросы

  • Нет связанных вопросов^_^