38

私はこれをよく見てきました:$fp = fopen($filepath, "w") or die(); しかし、この「または」構文に関する実際のドキュメントを見つけることができないようです。機能は明らかですが、どこでも使用できますか? そして、それに続く必要がありdie()ますか?or次のようなものを使用できる場合に使用する際の注意事項はありますか

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

ばかげた質問のように思えることはわかっていますが、これに関する厳密で迅速なルールは見つかりません。ありがとう。

4

8 に答える 8

15

It's a logical operator and can be used in any logical expression.

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

于 2012-03-02T14:54:39.013 に答える
6

これは、PHP の前任者から継承された巧妙なトリックです。これは、最初の式が true を返した場合、OR に続く式を PHP が非常に賢く評価しないという事実に基づいています。

function a($ret){
    echo "FOO";
    return $ret;
}
function b($ret){
    echo "BAR";
    return $ret;
}

$result = (a(true) OR b(true));

のみFOOを出力します。これは、b() が実行されていないことを意味します。

于 2012-03-02T15:02:11.120 に答える
5

orブール比較を行うだけです。

によって返されるものは、失敗した場合に返される (そうでない場合は別の値になる fopen()) ため、そのようなブール値として扱うことができます。FALSE

失敗した場合、ステートメントは右側に評価されるため、関数die()が呼び出されます。

于 2012-03-02T14:56:59.840 に答える
3

基本的には、「最初のコマンドが失敗した場合は、2 番目のコマンドを実行する」という意味です。あなたの例では、PHP がファイルを開くことができない場合、スクリプトを終了します ( die())。

于 2012-03-02T14:56:49.343 に答える
3

PHP の 'Or' は 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() トリックは、いくつかの理由から非常に不適切な選択です。

  1. ユーザーにエラー メッセージを表示するのは、あまり良い方法ではありません。
  2. エラーをキャッチすることはできません。
  3. エラーをログに記録できません。
  4. 画面に出力するかどうかを制御することはできません。開発環境では問題ありませんが、本番環境では問題ありません。

    5. あらゆる種類のクリーンアップを実行できなくなります。スクリプトが突然終了するだけです。

参照: [ここにリンクの説明を入力][1]

[1]: http://www.phpfreaks.com/blog/or-die-must-dieenter code here

于 2012-03-02T14:59:13.847 に答える
1

|| と同じように使用できます。論理 OR としてhttp://php.net/manual/en/language.operators.logical.php

于 2012-03-02T14:55:29.327 に答える
0

次のように使用できますが||、優先順位は同じではありません: http://www.php.net/manual/en/language.operators.precedence.php

演算子の優先順位は、2 つの式をどの程度「厳密に」バインドするかを指定します。たとえば、式 1 + 5 * 3 では、乗算 ("*") 演算子が加算 ("+") 演算子よりも優先順位が高いため、答えは 18 ではなく 16 になります。必要に応じて、括弧を使用して優先順位を強制できます。例: (1 + 5) * 3 は 18 に評価されます。

于 2012-03-02T14:58:02.733 に答える