Оценка короткого замыкания с помощью оператора И в PHP

Я пытаюсь улучшить свои навыки кодирования ninja h4x, и сейчас я просматриваю разные структуры, и я нашел пример кода, который довольно сложно для Google.

Я рассматриваю структуру FUEL, используемую в проекте.

Образец, который я не понимаю,

$data and $this->template->set_global($data); 

Что такое ключевое слово в этой строке кода? Он используется во многих местах в рамках, и это первое, что я нашел, которое его использует.

Это тип « оценки короткого замыкания ». Из and/&& следует, что обе стороны сравнения должны оцениваться как TRUE .

Элемент слева от and/&& оценивается как TRUE/FALSE и если TRUE , элемент справа выполняется и оценивается. Если левый элемент FALSE , выполнение останавливается, а правая сторона не оценивается.

 $data = FALSE; // $this->template->set_global($data) doesn't get evaluated! $data and $this->template->set_global($data); $data = TRUE; // $this->template->set_global($data) gets evaluated $data and $this->template->set_global($data); 

Обратите внимание, что они не должны быть фактическими логическими TRUE/FALSE , но также могут быть правдивыми / фальшивыми значениями в соответствии с правилами оценки PHP. Дополнительные сведения о правилах оценки см. В булевых документах PHP .

Когда вы используете логические операторы, операнды (значение слева и значение справа) оцениваются как логические, поэтому в основном этот код будет делать это короче:

 $o1 = (Bool)$data; // cast to bool if($o1) $o2 = (Bool)$this->template->set_global($data); // cast to bool 

Редактировать:

Дополнительная информация:

 $a = 33; isset($a) && print($a) || print("not set"); echo "<br>"; isset($a) AND print($a) OR print("not set"); echo "<br>"; 

Попробуйте прокомментировать / разложить $a = 33; , В этом разница между && и AND и между || и OR ( print возвращает true, при нажатии на «1» при преобразовании в строку).

Это действительное утверждение и работает следующим образом:

Если $ data действителен (не равен ', 0 или NULL), запустите $ this-> template-> set_global ($ data)

Это быстрый способ сказать:

 if ($data) { $this->template->set_global($data); } 

Btw вы также можете использовать && вместо

PHP поддерживает как && and логическую операцию И, и они обычно работают одинаково, за исключением and имеет несколько более низкий приоритет оператора, чем && : http://php.net/manual/en/language.operators.precedence.php

Это логический оператор, который означает, что он принимает два операнда и возвращает логическое значение – true или false . Если оба операнда оцениваются как true (что угодно, но и пустая строка, ноль или нуль в PHP), он вернет true , иначе результат будет false .

Вот официальные документы PHP по оператору: http://www.php.net/manual/en/language.operators.logical.php

 <?php $a = true and false; # FALSE $b = true and 5; # TRUE $c = '' and 0; # FALSE $d = null and true; # FALSE ?>