Подтвердить что ты не робот

PHP "или" Синтаксис

Я видел это много: $fp = fopen($filepath, "w") or die(); Но я не могу найти никакой реальной документации по этому синтаксису. Это достаточно очевидно, что он делает, но могу ли я использовать его где угодно? И за этим следует die()? Есть ли какие-либо оговорки в использовании or, если вы можете использовать что-то вроде

if (file_exists($filepath))
   $fp = fopen($filepath,"r");
else
   myErrMessage();

Я знаю, что это кажется глупым вопросом, но я не могу найти никаких жестких правил для этого. Спасибо.

4b9b3361

Ответ 2

Скажем так:

$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();

Это просто вопрос приоритета.

Ответ 3

or просто выполняет сравнение boolean.

То, что возвращается fopen(), может рассматриваться как такое логическое значение, потому что оно возвращает FALSE, если оно терпит неудачу (и другое значение, если это не так).

Если это не удается, оператор вычисляется вправо, и поэтому вызывается функция die().

Ответ 4

Это аккуратный трюк, унаследованный от какого-то предшественника 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() даже не выполнены.

Ответ 5

В основном это означает "если первая команда не выполняется, а затем выполнить вторую команду". В вашем примере, если PHP не может открыть файл, он завершит script (die()).

Ответ 6

'Или' в 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

Ответ 8

Его можно использовать как ||, но не имеет такого же приоритета: http://www.php.net/manual/en/language.operators.precedence.php

Приоритет оператора указывает, как "плотно" он связывает два выражения вместе. Например, в выражении 1 + 5 * 3 ответ равен 16, а не 18, потому что оператор умножения ( "*" ) имеет более высокий приоритет, чем оператор добавления ( "+" ). Скобки могут чтобы при необходимости использовать приоритет. Например: (1 + 5) * 3 оценивается до 18.