目次
=====の違いは何ですか?
PHPのゆるい比較( == )が実際にどのように機能するか
1.タイプが同じ場合、直接比較してください
2。タイプが異なる場合、PHPはそれらを変換しようとします
なぜ===はほとんど常に安全です
例: strpos() gotcha
==はいつ受け入れられますか?
概要:ベストプラクティス
ホームページ バックエンド開発 PHPチュートリアル PHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ること

PHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ること

Jul 31, 2025 pm 12:45 PM
PHP Operators

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

Php \ 'のタイプのジャグリングの分解: `==` vs. `===`に深く潜ること

PHPのタイプジャグリングは、特に=====を使用して値を比較する場合、利便性とトラップの両方になります。 0 == 'hello'true返すことに驚いたことがあるなら、あなたは一人ではありません。 PHPがどのようにゆるい( == )と厳格な( === )比較を処理するか、そして違いを理解することが信頼できるコードを書くのに残酷である理由を正確に分解しましょう。

PHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ること

=====の違いは何ですか?

高レベルで:

  • == (ゆるい比較):タイプジャグリング後の値を比較 - PHPは、比較前にタイプを一致させようとします。
  • === (厳密な比較):値とタイプの両方を比較します。変換は発生しません。
 0 == '0' // true  -  phpは文字列 '0'をint 0に変換します
0 === '0' // false  - タイプ違う:int vs文字列

その簡単な例は、 ===がより安全である理由を示しています。自動型変換による驚きを回避します。

PHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ること

PHPのゆるい比較( == )が実際にどのように機能するか

PHPは、 ==使用するときに複雑なルールセットに従います。これらはPHPタイプの比較テーブルで定義されていますが、ここにフードの下で起こることは次のとおりです。

1.タイプが同じ場合、直接比較してください

変換は必要ありません:

PHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ること
 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()
  • 入力の検証
  • false0''nullを使用して作業します。

例: strpos() gotcha

 if(strpos( 'hello'、 'x')== false){
    エコー「見つかりません」;
}

これは問題ありませんが、サブストリングが位置0で見つかった場合、 strpos() 0を返し、 0 == falsetrueです。したがって、「見つかりません」という偽りが得られます。

✅正しいバージョン:

 if(strpos( 'hello'、 'x')=== false){
    エコー「見つかりません」;
}

今では、本当に見つからなかったときにのみトリガーします。


==はいつ受け入れられますか?

===は一般的に推奨されますが、 ==悪ではありません。正当な用途があります。

  • タイプが重要でない場合のユーザー入力を比較してください:
     if($ _get ['page'] == 5)// '5'または5かどうか、同じ扱い
  • 文字列である可能性のある構成値を使用します
  • クイックプロトタイプ(ただし、生産時に===に切り替えます)

しかし、それでも注意してください。代わりに明示的にキャストすることを検討してください。

 (int)$ _ get ['page'] === 5

これにより、意図が明確になり、あいまいさが回避されます。


概要:ベストプラクティス

タイプのジャグリング落とし穴を避けるため:

  • defaustデフォルトで===および!==を使用します
  • false0''nullのゆるい比較に頼らないでください
  • cast必要に応じて明示的にタイプをキャストします
  • testエッジケース - 特に数字から始まる文字列
  • converson変換ルールを完全に理解していない限り、 ==を回避します

PHPでジャグリングするタイプは、あなたを噛むまで魔法のように感じることができます。 ==オペレーターは役立つようにしますが、その動作はエッジケースでいっぱいです。 ===を使用することにより、繰り返しではなく、一貫して動作するコードを制御して書き込みます。

基本的に:疑わしい場合は、厳格にしてください。

以上がPHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ることの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ホットトピック

PHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ること PHPのタイプジャグリングの分解: `==` vs. `===`に深く潜ること Jul 31, 2025 pm 12:45 PM

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

Spaceshipオペレーター( ``):複雑なソートロジックを簡素化します Spaceshipオペレーター( ``):複雑なソートロジックを簡素化します Jul 29, 2025 am 05:02 AM

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

マージを超えて:PHPのアレイオペレーターへの包括的なガイド マージを超えて:PHPのアレイオペレーターへの包括的なガイド Jul 29, 2025 am 01:45 AM

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

PHPの実行オペレーター:シェルコマンドを(慎重に)実行する時期と理由 PHPの実行オペレーター:シェルコマンドを(慎重に)実行する時期と理由 Jul 31, 2025 pm 12:33 PM

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

PHPの参照割り当ての力と危険( `=&`) PHPの参照割り当ての力と危険( `=&`) Jul 30, 2025 am 05:39 AM

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

PHP演算子の優先順位と連想の迷路をナビゲートします PHP演算子の優先順位と連想の迷路をナビゲートします Jul 31, 2025 pm 12:40 PM

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

短絡および優先順位トラップ: `&&`/`||` vs. `and`/`または ` 短絡および優先順位トラップ: `&&`/`||` vs. `and`/`または ` Jul 30, 2025 am 05:34 AM

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

PHP式のプレインメント前とポストインクリメントの微妙な芸術 PHP式のプレインメント前とポストインクリメントの微妙な芸術 Jul 29, 2025 am 04:44 AM

プレインクリメント($ i)を増やすことができます

See all articles