Я видел это много: $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
просто выполняет логическое сравнение.
То, что возвращается 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 не может открыть файл, он прекратит выполнение скрипта ( 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));
Трюк или die () – очень плохой выбор по нескольким причинам:
Вы не можете контролировать, должен ли он выводиться на экран или нет. Это нормально делать в среде разработки, но, конечно, не в производственной среде.
5. Это мешает вам делать какие-либо очистки. Это просто заканчивает сценарий внезапно.
Ссылка: [введите ссылку здесь] [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.