2017-04-03 3 views
-1

次のPHPコードブロックが実行されるのはなぜですか?PHP - "1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1が当てはまる

if ("1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1) { 
    echo "WTF!"; 
} 

これはおそらく"1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1が本当ですか?

文字列が常にtrueと評価される場合、次のコードブロックが実行されないのはなぜですか? PHPがintに文字列を比較し

if ("111987266c1d" == 1) { 
    echo "WTF, again!"; 
} 
+1

* "これはおそらく... == 1が真であることを意味しますか?" - はい。 –

+0

私は 'wtf.php'テストファイルを作りましょう;-) brb。編集:ああ、私が応答していたコメントを削除しました。 –

+0

'(" 111987266c1d "!= 1)== true' – Daan

答えて

3

は、それは文字が開始どこエンディング、文字列の先頭に数字だけをとるint型に文字列を変換します。私は私のティンカーを通じて、いくつかの試験例を実行しました:

[1] > "1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1; 
// true 
[2] > "1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == '1'; 
// false 
[3] > "1ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 2; 
// false 
[4] > "2ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 2; 
// true 
[5] > "2ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 3; 
// false 
[6] > "2ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1; 
// false 
[7] > "10ebc0b7ef6141d11989f78748555751721187266c1dd4ece76fec267e5cb1aaf" == 1; 
// false 
[9] > "111987266c1d" == 1; 
// false 

これはさらにdocumentationによってバックアップされます。

あなたは、文字列と数値を比較したり、比較は、数値、文字列が含まれている場合は、各文字列を数値に変換され、数値的に比較が行われます。

+0

意味があります。だから私の2番目の例は、実際には111987266で始まり、 '(111987266 == 1)== false'という数字になっているので真実ではありません。ありがとうございました。 – ryansin

+1

それはお金の上に私が後に行っていた説明です;-) –

+1

奇妙な(しかし有効な)質問への素晴らしい答え.. –

関連する問題