PHPでの型キャスト==二本足のスツール?

画像

-PHPでは、型キャストは正常に機能します。常識を有効にする必要があります。
「なぜそれを比較しているのですか?」
-うわー、PHPの何らかの不具合、見て、2つのフロートを比較しています、それらは同じであるべきで、彼はそれらが等しくないことを教えてくれます。
-ああ、まあ、数字と文字列を比較するとき、何が機能するかを整理する必要があります。

同僚からこのようなことを聞​​いたことがありますか? 次に、型のキャスト、および==演算子での動作の例を示す金曜日の投稿を示します。

簡単に説明しますが、例だけがあります。 そして、読者の皆様、どうぞ。 いくつかの答えはネタバレの下に隠されています。 ネタバレの下で答えを見る前に、自分で答えてみてください。 正解ごとに、当然のことながら自分にポイントを追加します。 アンケートの投稿の最後に、結果を書き留めることを忘れないでください。 同意しましたか?
それでは行きましょう。
数字から始めましょう

数字を比較するよりも簡単なのは、数字を幼稚園と比較することです。

順序については、明らかなことを確認します。

11 == 11 // true,  12 == 11 // false,   12 == 0xC // true,   16- 

そのような比較はどうですか?

 12 == "0xC" 

答えてみてください
本当 はい、ここで、文字列の値は、数値システムを考慮して整数に変換されました。

そして、これを試してみると?

 12 == 014 

クールは覗かない、覚えてる?
本当 他にどう? 014は8進数の同じ12です。

今このように:

 12 == "014" 

結果...
偽 望んでいて、ここで真実である人々は、あなたの要件を緩和します。「0xC」は12に変換され、それで十分です。

など:

 14 == "014" 

同様に...
前の例では、予想どおりtrueです。

ここではすべてが明らかなようです:

 014 == "014" 

正解は...
false。純粋に視覚的ですが、特に他の人のコードを読んでいる場合はすぐに気づきにくいです。

注意:

 0 == "0,9" 

答えは...
本当ですか? そして、はい、それはとても間違っています:0 ==“ 0.9”。 コンマは文字列記号と見なされ、それ以降はすべて破棄されました。

次の値を比較します。

 "1e2" == "100" 

私たちは...
1×10の2乗が100に等しいため、真です。

 0b11 == 3 // true, 0b -      

そして、もし0b11が並んでいるなら?

 "0b11" == 3 

比較...
false、これは16進数システムで機能し、バイナリシステムでは申し訳ありません。

今これを試してください:

 2.333 == "2.333petrovich" // true,          . 2.333 == "ivanovich2.333" // false,    ,     . 0 == "ivanovich2.333" // true,   . 


そして、自分で試してください:
 "2.33a" == "2.33b" 

そして...
false、変換は行われず、文字列が比較されます。

 233 == "233w1" // true,     

ほぼ同じ:

 233 == "233e1" 

答えは...
false、はい、ここで233 * 10。

 "233" == "233w1" // false 233 == "233*1" // true 

もしそうなら?

 233 == "233*2" 

ここに...
正しい、ペトロヴィッチとの類推によって。

 0 == "" // true 

最初に自分ののぞき見しないでください:

 "0" == "" 

常識を有効にしようとしています...
false、調整します。

 "1.000000000000000123" == "1.000000000000000456" // false, ,   . 

行に2つのフロートもあります。

 "2.000000000000000123" == "2.000000000000000456" 

推測?
本当、驚かないでください、見た目は数字が異なりますが、2 == 2、ここではすべてが2に切り上げられます。

ブール比較

数字はシンプルで簡単であり、誰もが正しく答えたので、ここにいくつかの簡単な例を示します。

最初は、そのようなしゃれ...私は中Liについての冗談を思い出しましたが、おそらく控えるでしょう。

 "true" == true // true "false" == true // true,   true "false" == false // false,   true "true" == false // false,   true 

ここではすべてがシンプルで明確です。

 true == "0" // false,       ,    true == "00" // true,    ... true == 00 // false true == "00" + 0 // false,      0  

もしそうなら追加:

 true == "01" + 0 

その後、私たちは...
trueですが、ここに1が追加されています。

 true == "0x" + 0 // false 

ゼロの前のスペース:

 true == " 0" 

確認しています...
誰かがスペースを落とすことを期待するかもしれませんが、ゼロとの比較があるでしょう。

 true == 0x0 // false true == "0x0" // true, -,    0,   true == "0.0" // true,    


 true == " " // true true == [] // false,   -  false true == [0] //     - true 

もしそうなら?

 true == [[]] 

確認しています...
true、ここでは配列には空の配列自体が含まれています。

ヌル

もう少し比較してみましょう。現在はnullです。

 null == false // true, null == 0 // true, false == "0" // true, 

類推によって推測してみてください:

 null == "0" 

私たちは...
false、どうやら、覚えておく必要があるだけです。

 null == [] // true,     null == [0] // false,    - 


配列

まあ、特に好奇心-配列の比較。

ここで自分で推測してください。覗かないでください:

 [] == 0 

確認しています...
null == 0および[] == nullですが、正確にfalseです。

 [0] == 0 // false, 

ドキュメントには、「$ aと$ bに同じキー/値のペアが含まれている場合、$ a == $ bはTRUEである」と書かれています。
このステートメントがどのように機能するかを確認しましょう。 さらに、ドックはキーの比較方法については何も言っていません。

 [1 => 1] == [1 => 1] // true [1 => 1] == ["1" => 1] // true,  : [1 => 1] == ["0x1" => 1] // false,  ,       : array_keys([1 => 1]) == array_keys(["0x1" => 1]) // true : [1 => 1] == [1 => "0x1"] // true 

なぞなぞ

そしてなぞなぞのデザート(私からではないなぞなぞ、同僚がかつて私にくれたなぞ)。
条件$ x == 1 && $ x == 2が満たされる場合、それが可能な場合、いつ、そうでない場合、そしてなぜですか?

しかし、履歴書はどうですか?

ここで要約すると、2本の脚を備えたスツールは、本来の目的に非常によく使用できます。 さらに、それはその前向きな側面を持っています、例えば、それは前庭の器具とgood部を良い形に保つのを助けます。 それで、ドックを読んで、コーンを埋めると、すべてがうまくいきます。

Source: https://habr.com/ru/post/J259497/


All Articles