`&&` vs. `and`:PHPの微妙だが重大な違いを明らかにする
&&とPHPでは同じ論理関数ですが、優先順位は異なり、異なる実行命令になります。 &&優先度は、assionment operator =;したがって、$ success = true and falseは実際には($ success = true)とfalseに解析され、$ successはまだ真です。 1。&& and ||を使用します条件付き判断; 2。制御フロー($ file = fopen()またはdie()などの使用およびおよびのみ; 3.複雑な式は、括弧を使用して優先度を明確にする必要があります。 4.明示的に意図されていない限り、混合および/または割り当てを避けます。要するに、2つは論理的に同等ですが、論理エラーを防ぐために優先度の違いにより、使用シナリオを区別する必要があります。
PHPコードを書くときは、論理操作に使用&&
and
、使用されていることもあります。一見すると、彼らは同じことをしているようです。2つの条件が真であるかどうかを評価します。しかし、 &&
and
PHPの間には微妙でありながら重大な違いがあり、誤解された場合、予期しないバグにつながる可能性があります。それを分解しましょう。

それらは平等ではありません - オペレーターの優先事項は重要です
オペレータの優先順位の&&
とand
の間の重要な違い、つまり演算子が式で評価される順序。
-
&&
にはよりand
優先されます。 - 実際、割り当て(
=
)よりも低い優先度が非常に低いand
、コードの動作方法が大幅に変化する可能性があります。
これを実行して見てみましょう:

$ success = true && false; var_dump($ success); // bool(false)
これは予想通りに機能します。しかし今、 and
してみてください
$ success = true and false; var_dump($ success); // bool(true) - 待って、何?!
なぜそれがtrue
ですか?

PHPが優先順位による式をどのように解析するかのためです。
//これは実際には次のように解釈されます。 ($ success = true)およびfalse;
したがって、 $success
true
に割り当てられ、その後and false
部分は評価されますが、変数には影響しません。完全な式はfalse
に評価されますが、割り当てはすでに発生しています。
これは一般的なtrapです。
実用的な例:チェーン操作
この問題は、割り当てとロジックを組み合わせるときにしばしば表面化します。
$ result = getData()またはdie( 'no data');
このパターンは実際or
は安全ですand
それは次のように解釈されます:
($ result = getData())またはdie( 'no data');
したがって、 getData()
がfalse
を返す場合、割り当てはまだ発生し、その後die()
がトリガーされます。
ただし、 ||
を使用した場合その代わり:
$ result = getData()|| die( 'no data');
それは次のように解析されます。
$ result =(getData()|| die( 'no data'));
つまり、 die()
getData()
がfalseの場合にのみ実行されますが、式全体の結果(true/false)は実際のデータではなく$result
に割り当てられます。だからあなたはあなたのデータを失います!
では、いつ使用する必要がありますか?
これが実用的なガイドです:
sure
&&
||
を使用します内部の論理条件のif
、while
、etc。if($ uservalid && $ inputValid){...}
controlコントロールフローの優先度が低い場合にのみ使用し、
and
or
エラー処理)。$ file = fopen( 'data.txt'、 'r')またはdie( 'fileを開くことはできません');
commions行動を明示的に理解し、意図しない限り、混合
and
割り当てor
避けてください。
クイックリファレンス:優先レベル(高から低い)
オペレーター | 優先レベル |
---|---|
! | 高い |
&& | 中くらい |
|| | 低い |
and | 非常に低い |
or | さらに低い |
= (割り当て) | 非常に低い |
and
、複数の演算子を含む式でand
、 &&
or
緊密にバインドします。
ベストプラクティス
混乱を避けるため:
-
&&
and||
に固執しますほとんどの条件付きロジックで。 - 疑わしいときは両親を使用してください:
if(($ active == true)および($ admin == true)){...}
- 制御フローパターンに使用している場合、
and
/or
依存しないようにしないでください(die()
例など)。 - 複雑な表現で特別に注意してください。
基本的に、 &&
and
同じ論理操作を行いますが、それらが式で起こる場合は完全に異なります。優先順位のその小さな違いは、主要なロジックバグにつながる可能性があります。
したがって、それらは交換可能に見えるかもしれませんが、それらを異なる仕事のための明確なツールとして扱います。
以上が`&&` vs. `and`:PHPの微妙だが重大な違いを明らかにするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

一致式は、PHP8でより簡潔で安全な代替品を提供します。 IF-ELSEIFおよびスイッチと比較して、緩いタイプの比較の誤差を回避するために、厳密な比較(===)を自動的に実行します。 2。一致は、値を直接返すことができる式で、割り当てと関数のリターンに適しているため、コードの単純さを改善します。 3。一致は常に厳密なタイプチェックを使用して、整数、ブール膜、弦の間の予期しない一致を防止します。 4.単一腕のマルチ値マッチング(0、false、 ''など)をサポートしますが、複雑な条件(範囲判断など)は依然としてif-elseifを必要とします。したがって、単一の変数の正確な値をマッピングするときに一致を使用する必要がありますが、複雑なロジックはif-elseifを保持します。

Thenullcoalescingoperator(??)は、nullorundefined.1.ItreturnStherightoperand.2.unlikethelogicalor(||)オペレーター、?? joftriggergerback fornull

回避された国家のseyreducereadability; useif-elsechainsinstead.2.don'tuseternariesforsidefectslikefunctioncalls;

==の代わりに===を使用することは、PHPタイプの変換エラーを回避するための鍵です。==は予期しない結果を引き起こし、===正確な判断を確実にするために値とタイプを同時に比較するためです。たとえば、0 == "false"はtrueですが、0 === "false"はfalseであるため、0、空の文字列、またはfalseである可能性のある返品値を扱う場合、===は論理エラーを防ぐために使用する必要があります。

useguardclausestoreTorerlylyandflattenstructure.2.extractComplexConditionSINTODESINTIVESORVARIABLESFORCLALITYANDREUSE.3.REPLACEMULTIONPRECONDITIONCOMBINATIONSWITHALOUKUSTABLEARSTABLEARTORSTABLESTORTORSTALTORTORTABLESTALTERTALIZEPATTERNTRALIZELOGIC.4.APLOMORMORPHISPTYTTYLIMINATETET

&& and and and andはPHPでは同じ論理関数ですが、優先順位は異なり、異なる実行命令になります。 &&優先度はよりも高く、優先度は割り当てoperator =よりも低いです。したがって、$ success = trueandfalseは実際には($ success = true)andfalseとして解析され、$ successはまだ真実です。 1。&& and ||を使用します条件付き判断; 2。制御フロー($ file = fopen()ordie()などの使用およびおよびまたはのみでのみ; 3.複雑な式は、優先度を明確にするためにブラケットを使用する必要があります。 4.明示的に意図されていない限り、混合および/または割り当てを避けてください。

言語、コンパイラの最適化、論理構造に応じて、パフォーマンスに影響を与えることがあります。 1.ステートメントが順番に実行され、最悪の場合の複雑さがo(n)である場合、最も可能性の高い条件を最初に配置する必要があります。 2。スイッチステートメントは、コンパイラによってO(1)のジャンプテーブルに最適化できます。 3.単一の変数が複数の定数整数と比較され、多くの分岐があり、スイッチはより高速です。 4.範囲の判断、複雑な条件、非整数型以外の枝を少なくする場合、より適切であるか、同様のパフォーマンスがある場合。 5。異なる言語(C/C、Java、JavaScript、C#など)は、最適化度の異なるスイッチを持ち、実際のテストと組み合わせてテストする必要があります。最初にSWIを使用する必要があります

PHPの代替制御構造では、コロンと、混合HTMLの読みやすさを改善できる巻き毛のブレースの代わりに、EndifやEndforなどのキーワードを使用します。 1. if-elseif-elseはコロンで始まり、endifで終了し、条件ブロックをより明確にします。 2。foreachはテンプレートループで識別しやすく、endforeachはループの終了を明確に示しています。 3。めったに使用されないが、それらもサポートされています。この構文には、ビューファイルに明らかな利点があります。構文エラーを削減し、読みやすさを高め、HTMLタグ構造に似ています。しかし、混乱を避けるために、純粋なPHPファイルで巻き装置を使用し続ける必要があります。したがって、コードの保守性を向上させるために、PHPとHTMLを組み合わせたテンプレートでは、代替構文が推奨されます。
