Я пытаюсь улучшить свои навыки кодирования 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 ?>