3

かなり多くのif/elseステートメントの必要性を取り除くことができる単純な質問.

たとえば、次のようなクエリがあるとします。

if ($success1=$db->query('SELECT * FROM `foo`;') || $success2=$db->query('SELECT * FROM `bar`;')) {
   ...
}

最初のクエリが成功したかどうかのチェックを停止しますか?

4

2 に答える 2

8

あなたが言及しているのは短絡と呼ばれるものです。はい、php は短絡を使用します。AND (&&) 条件の最初のチェックが失敗した場合、2 番目のチェックは行われません。同じことが OR ( || ) にも当てはまります。最初のチェックが成功した場合、2 番目のステートメントは確認されません。

検証については、次の投稿を参照してください: PHP ショート サーキット遅延評価、php.net マニュアルのどこにありますか?

これが非常に役立つ例は、ゼロで除算する場合です。最初のチェックで分母がゼロかどうかを判断し、次に 2 番目のチェックで除算を行います。順序が重要です。分母がゼロの場合、2 番目のチェックがスキップされ、ゼロで除算されることはありません。

if($x != 0 && 10/$x > 3)

于 2012-07-10T12:19:50.190 に答える
6

最初のものが true の場合、ステートメント内の他のものをチェックする必要がないため、続行します。そうでない場合は、次のようにコーディングします。

if(isset($var) && $var == 1)

定義されていないエラーが発生するため、機能しません。最初のステートメントが false であることがわかるとすぐに、残りのステートメントを停止します。

于 2012-07-10T12:20:04.337 に答える