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

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

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

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

Solutions Collecting From Web of "PHP "или" Синтаксис"

Это логический оператор и может использоваться в любом логическом выражении.

http://php.net/manual/en/language.operators.logical.php

Скажем так:

 $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 () – очень плохой выбор по нескольким причинам:

  1. Это не очень хороший способ представить пользователю сообщение об ошибке.
  2. Вы никак не можете поймать ошибку.
  3. Вы не можете зарегистрировать ошибку.
  4. Вы не можете контролировать, должен ли он выводиться на экран или нет. Это нормально делать в среде разработки, но, конечно, не в производственной среде.

    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.