PHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ること
===の代わりに===を使用することは、PHPタイプの変換トラップを回避するための鍵です。===は値とタイプを同時に比較し、==はタイプ変換を実行して予期しない結果につながるからです。 1。==型が異なると、変換が自動的に変換されます。たとえば、「Hello」は0に変換されるため、0 == 'Hello'はTrueです。 2。===そのような問題を避けて、値とタイプが同じである必要があります。 3. strpos()を扱う場合、またはfalse、0、 ''、およびnull、===をreturn valueする場合。 4。==は、ユーザー入力比較などのシナリオに使用できますが、明示的なタイプ変換に優先度と===; 5.ベストプラクティスは、デフォルトで===を使用することです。==に依存する暗黙の変換ルールを避けて、コードの動作が一貫性があり信頼性があることを確認します。
PHPのタイプジャグリングは、特に==
対===
を使用して値を比較する場合、利便性とトラップの両方になります。 0 == 'hello'
をtrue
返すことに驚いたことがあるなら、あなたは一人ではありません。 PHPがどのようにゆるい( ==
)と厳格な( ===
)比較を処理するか、そして違いを理解することが信頼できるコードを書くのに残酷である理由を正確に分解しましょう。

==
と===
の違いは何ですか?
高レベルで:
-
==
(ゆるい比較):タイプジャグリング後の値を比較 - PHPは、比較前にタイプを一致させようとします。 -
===
(厳密な比較):値とタイプの両方を比較します。変換は発生しません。
0 == '0' // true - phpは文字列 '0'をint 0に変換します 0 === '0' // false - タイプ違う:int vs文字列
その簡単な例は、 ===
がより安全である理由を示しています。自動型変換による驚きを回避します。

PHPのゆるい比較( ==
)が実際にどのように機能するか
PHPは、 ==
使用するときに複雑なルールセットに従います。これらはPHPタイプの比較テーブルで定義されていますが、ここにフードの下で起こることは次のとおりです。
1.タイプが同じ場合、直接比較してください
変換は必要ありません:

5 == 5 // true(両方のint) 'hello' == 'hello' // true
2。タイプが異なる場合、PHPはそれらを変換しようとします
これは物事が奇妙になる場所です。一般的なゴッチャは次のとおりです。
文字列から数値変換:文字列が数値のように見える場合、変換されます。
'123 '== 123 // true '123ABC '== 123 // false - 完全に変換できません '0ABC' == 0 // true - '0ABC'はintにキャストすると0になります
空またはゼロの文字列は0になります
'0' == 0 // true '== 0 // true '== 0 // true(トリミング後、空になります)
ブーリアンは早期に変換されます
true == '1' // true true == 'any string' // true - (bool) '任意の文字列'がtrue
nullと空の文字列は、多くのことと「等しい」です
null == '' // true null == 0 // true null == false // true
配列とオブジェクトには特別な動作があります
array()== 0 // true array()== false // true
そして悪名高い:
0 == 'hello' // true - (int) 'hello'は0です
はい、本当に。整数への'hello'
キャストは0
なるので、 0 == 0
なります。
なぜ===
はほとんど常に安全です
厳密な比較は、すべてのタイプの強制を回避します。次の場合にのみtrue
を返します。
- 値は等しい
- タイプが識別されます
0 === '0' // false - int vs文字列 0 === 0 // true '0' === '0' // true null === false // false - 異なるタイプ
この予測は===
に理想的になります:
- 関数のreturn値を確認する(例、
strpos()
) - 入力の検証
false
、0
、''
、null
を使用して作業します。
例: strpos()
gotcha
if(strpos( 'hello'、 'x')== false){ エコー「見つかりません」; }
これは問題ありませんが、サブストリングが位置0で見つかった場合、 strpos()
0
を返し、 0 == false
がtrue
です。したがって、「見つかりません」という偽りが得られます。
✅正しいバージョン:
if(strpos( 'hello'、 'x')=== false){ エコー「見つかりません」; }
今では、本当に見つからなかったときにのみトリガーします。
==
はいつ受け入れられますか?
===
は一般的に推奨されますが、 ==
悪ではありません。正当な用途があります。
- タイプが重要でない場合のユーザー入力を比較してください:
if($ _get ['page'] == 5)// '5'または5かどうか、同じ扱い
- 文字列である可能性のある構成値を使用します
- クイックプロトタイプ(ただし、生産時に
===
に切り替えます)
しかし、それでも注意してください。代わりに明示的にキャストすることを検討してください。
(int)$ _ get ['page'] === 5
これにより、意図が明確になり、あいまいさが回避されます。
概要:ベストプラクティス
タイプのジャグリング落とし穴を避けるため:
- defaustデフォルトで
===
および!==
を使用します false
、0
、''
、null
のゆるい比較に頼らないでください- cast必要に応じて明示的にタイプをキャストします
- testエッジケース - 特に数字から始まる文字列
- converson変換ルールを完全に理解していない限り、
==
を回避します
PHPでジャグリングするタイプは、あなたを噛むまで魔法のように感じることができます。 ==
オペレーターは役立つようにしますが、その動作はエッジケースでいっぱいです。 ===
を使用することにより、繰り返しではなく、一貫して動作するコードを制御して書き込みます。
基本的に:疑わしい場合は、厳格にしてください。
以上がPHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ることの詳細内容です。詳細については、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)

===の代わりに===を使用することは、PHPタイプの変換トラップを回避するための鍵です。===は値とタイプを同時に比較し、==はタイプ変換を実行して予期しない結果につながるからです。 1。==型が異なると、変換が自動的に実行されます。たとえば、「Hello」は0に変換されるため、0 == 'Hello'はTrueです。 2。====そのような問題を避けて、値とタイプが同じである必要があります。 3. strpos()を処理する場合、falseを返す場合、またはfalse、0、 ''、null、===; 4。==はユーザー入力比較やその他のシナリオに使用できますが、明示的なタイプ変換に優先度を与えてください。===; 5.ベストプラクティスは、デフォルトで===を使用することです。==に依存する暗黙の変換ルールを避けて、コードの動作が一貫性があり信頼性があることを確認します。

theSpaceshipOperator()inphpreturns-1,0、or1based-hatheleftoperandislessthan、equalto、orgreaterthantherightoperand、makingidealfortingcallbacks.2。

theunionoperator()を組み合わせて、Keysandkeepingtheleftarray'svaluesOnkeyconflicts、makingidealforsettingdefaults;

ExecutionOperatorInphpは、BybackTicks( `)を表し、RunsShellCommandSandTheIroutputaSastring、equivalentToshell_exec()を表します。 2. itmaybeusedinrarecaseslikeCallingsystemTools(例:pdftotext、ffmpeg)、interfacing with-onlyscripts、orserveradministrationvi

PHPの=&演算子は変数参照を作成するため、複数の変数が同じデータを指すようにし、一方を変更すると他方に影響します。 2。その法的使用には、関数からの参照の返却、レガシーコードの処理、特定の変数操作が含まれます。 3.ただし、ループの後に参照をリリースしないなど、予期しない副作用、デバッグの困難などの問題を引き起こすのは簡単です。 4.最新のPHPでは、オブジェクトはデフォルトで参照ハンドルで渡され、配列と文字列は書き込み時間にコピーされ、パフォーマンスの最適化には手動の参照は必要ありません。 5.ベストプラクティスは、通常の割り当てで=&の使用を避け、ループ後に時間内に参照を確立し、必要に応じてパラメーター参照と文書の説明を使用することです。 6.ほとんどの場合、より安全で明確なオブジェクト指向の設計を優先する必要があり、=&は非常に少数の明確なニーズの場合にのみ使用されます。

PHP演算子の優先順位と結合により、表現の評価の順序が決定されます。正しい理解は隠されたバグを避けることができます。 1。上昇や分割など、優先度が高い演算子が最初に実行されます。算術操作における追加および減算よりも高くなります。 2。同じ優先度が同じ場合、減算や割り当て右の組み合わせなど、左または右に組み合わされます。 3。ブラケット()は最優先事項であり、意図を明確にするために使用する必要があります。 4。文字列連結。比較を好む、ブラケットは誤判断を避ける必要がある。 5。論理操作&& ||優先度はAndorよりも高く、混合使用はエラーが発生しやすいです。 6. Php7.4以降の3方向操作:右の組み合わせに変更されました。これはより直感です。 7。&&&||を使用することをお勧めしますまず、複雑な表現を分割し、ツールで確認すると、ブラケットは読みやすさとセキュリティを向上させます

inlanguageSthatsupportboth、&&/|| havehigherprecedencethanand/or、sousingthemwithsignmentcanleadeadtounexpected redesults;
