PHP "или" Синтаксис
Я видел это много: $fp = fopen($filepath, "w") or die();
Но я не могу найти никакой реальной документации по этому "или" синтаксису. Понятно, что он делает, но могу ли я его использовать где угодно? И должно ли это сопровождаться die()
? Есть ли какие-либо предостережения по использованию or
когда вы могли бы использовать что-то вроде
if (file_exists($filepath))
$fp = fopen($filepath,"r");
else
myErrMessage();
Я знаю, что это кажется глупым вопросом, но я не могу найти никаких жестких и быстрых правил для этого. Благодарю.
8 ответов
Это логический оператор и может использоваться в любом логическом выражении.
Скажем так:
$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();
Это просто вопрос приоритета.
Это хитрый трюк, унаследованный от некоторого предшественника 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() даже не были выполнены.
or
просто делает логическое сравнение.
Что вернуло fopen()
может рассматриваться как такое логическое значение, потому что оно возвращает FALSE
если это не удается (и другое значение, если это не так).
Если это не удается, оператор оценивается справа, и поэтому функция die()
называется.
"Или" в PHP похоже на C-подобный синтаксис (||)
<?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. Это мешает вам делать какие-либо очистки. Это просто резко завершает сценарий.
Ссылка: [введите описание ссылки здесь] [1]
[1]: http://www.phpfreaks.com/blog/or-die-must-die enter code here
По сути, это означает, что "если первая команда терпит неудачу, тогда выполняйте вторую команду". В вашем примере, если PHP не может открыть файл, он завершит работу скрипта (die()
).
Его можно использовать так же, как вы бы использовали || как логическое ИЛИ 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.