web-dev-qa-db-ja.com

PHPで「何かを行うOR DIE()」はどのように機能しますか?

私はMySQLデータベースにアクセスするためのPHPアプリを書いています。チュートリアルでは、

mysql_connect($Host, $user, $pass) or die("could not connect");

どのようにPHPはダイの部分を実行するように関数が失敗したことを知っていますか?私はそれの「または」部分がどのように機能するかを聞いていると思います。前に。

96
chustar

最初のステートメントがtrueを返す場合、ステートメント全体がtrueでなければならないため、2番目の部分は実行されません。

例えば:

_$x = 5;
true or $x++;
echo $x;  // 5

false or $x++;
echo $x; // 6
_

したがって、クエリが失敗した場合、die()ステートメントを評価し、スクリプトを終了します。

130
nickf

PHPのorはCの_||_のように機能します(これはPHP-orは見た目がよく、演算子の優先順位も異なります。 このページ を参照してください。

short-circuit 演算子として知られています。最終値を決定するのに十分な情報が得られると評価をスキップするからです。

あなたの例では、mysql_connect()がTRUEを返す場合、PHPはすでにdie()が評価されても、ステートメント全体がTRUEと評価されることを知っているため、die()は評価されません。

mysql_connect()がFALSEを返す場合、PHPはステートメント全体がTRUEまたはFALSEに評価されるかどうかを知らないため、続行してdie()を評価しようとします。プロセス内のスクリプト。

これは、orが機能する方法を利用する素敵なトリックです。

32
Artelius

他の人が説明したように機能します。

PHPでは、(Perlの場合のように)例外を発生させないため、「die」を使用しないでください。代わりに、通常の方法で適切に例外をスローします。

dieはPHPでキャッチできず、ログに記録されません-代わりに、メッセージを不格好に出力し、誰かに何も伝えたり、イベントを記録したり、再試行したりする機会を与えることなく、すぐにスクリプトを終了します。

11
MarkR