Ответ 1
Это логический оператор и может использоваться в любом логическом выражении.
Я видел это много: $fp = fopen($filepath, "w") or die();
Но я не могу найти никакой реальной документации по этому синтаксису. Это достаточно очевидно, что он делает, но могу ли я использовать его где угодно? И за этим следует die()
? Есть ли какие-либо оговорки в использовании or
, если вы можете использовать что-то вроде
if (file_exists($filepath))
$fp = fopen($filepath,"r");
else
myErrMessage();
Я знаю, что это кажется глупым вопросом, но я не могу найти никаких жестких правил для этого. Спасибо.
Это логический оператор и может использоваться в любом логическом выражении.
Скажем так:
$result = first() || second();
будет оценивать:
if (first()) {
$result = true;
} elseif (second()) {
$result = true;
} else {
$result = false;
}
а
$result = first() or second();
будет оценивать:
if ($result = first()) {
// nothing
} else {
second();
}
Другими словами, вы можете рассмотреть:
$result = first() || second();
$result = (first() || second());
и
$result = first() or second();
:
($result = first()) || second();
Это просто вопрос приоритета.
or
просто выполняет сравнение boolean.
То, что возвращается fopen()
, может рассматриваться как такое логическое значение, потому что оно возвращает FALSE
, если оно терпит неудачу (и другое значение, если это не так).
Если это не удается, оператор вычисляется вправо, и поэтому вызывается функция die()
.
Это аккуратный трюк, унаследованный от какого-то предшественника PHP, основанный на том, что PHP довольно разумно не будет оценивать какое-либо выражение, следующее за OR, если сначала вернется true:
function a($ret){
echo "FOO";
return $ret;
}
function b($ret){
echo "BAR";
return $ret;
}
$result = (a(true) OR b(true));
будет распечатываться только FOO
, означает, что b() даже не выполнены.
В основном это означает "если первая команда не выполняется, а затем выполнить вторую команду". В вашем примере, если PHP не может открыть файл, он завершит script (die()
).
'Или' в PHP подобен синтаксису C-like (||)
<?php
if( ($a==1 || $a==2) && ($b==3 || $b==4) && ($c==5 || $c==6) ) {
//do that something here.
}
?>
"Или" вы говорите, это всего лишь трюк, как следующие состояния:
Пример:
$result = mysql_query('SELECT foo FROM bar', $db) or die('Query failed: ' . mysql_error($db));
Тройка or die() - очень плохой выбор по нескольким причинам:
Вы не можете контролировать, должен ли он выводиться на экран или нет. Это нормально делать в среде разработки, но, конечно, не в производственной среде.
5. Это мешает вам делать какие-либо очистки. Он просто заканчивает script внезапно.
Ссылка: [введите ссылку здесь] [1]
[1]: http://www.phpfreaks.com/blog/or-die-must-die enter code here
Его можно использовать так же, как вы использовали || как логическое ИЛИ http://php.net/manual/en/language.operators.logical.php
Его можно использовать как ||
, но не имеет такого же приоритета:
http://www.php.net/manual/en/language.operators.precedence.php
Приоритет оператора указывает, как "плотно" он связывает два выражения вместе. Например, в выражении 1 + 5 * 3 ответ равен 16, а не 18, потому что оператор умножения ( "*" ) имеет более высокий приоритет, чем оператор добавления ( "+" ). Скобки могут чтобы при необходимости использовать приоритет. Например: (1 + 5) * 3 оценивается до 18.