2

php、私の最愛の古い友人。

さて、文字列「0」が偽の値になる理由を理解できます。'0'ゆるい型付け言語と同じであり0、ゆるい型付け言語であるため、これは公正な見方です。したがって、これにより== ==が得られます。0falsefalse0'0'

大丈夫...でも!! これは何ですか?

<?php
    print "number of surprised persons: " . ('false' == 0);

出力は....

number of surprised persons: 1

これはどのように合理的ですか?これに驚くのは私だけでしょうか?私は何を見ていないのですか?

さらなるテストにより、整数 0 が (演算子 == により) に等しいことが証明されました。

0        <-- integer
false    <-- boolean
null     <-- just.. you know, null
'0'      <-- string
''       <-- string
'false'  <-- string
'true'   <-- string
'null'   <-- string

当然、私は主に演算子 === を使用して比較します。これについて知ったので、もちろんプログラミングを調整する必要があります。それについては疑問の余地はありません。それでも!誰かがpl0xに光を当てることができますか?

4

3 に答える 3

8

これは、文字列を整数と比較するときに、両方が文字列またはブール値に変換されるのではなく、整数に変換されるためです。PHPの場合、考えてみると、これはまったく奇妙なことではありません(比較的、私は推測します)。

'true' == 0
// is the same as
(int)'true' == 0
// is the same as
0 == 0
// is the same as
true

そして、これは、文字列だけでなく、数値以外の文字列にも当てはまります"0"。が出力される理由1は、の文字​​列バージョンがtrueisであるためです1(falseの文字列バージョンは空の文字列です)。

于 2011-10-12T18:46:14.607 に答える
6

あなたが出力について懸念している限り:

('false' == 0)=ブール値TRUE=文字列"1"

echo文字列コンテキストをトリガーしています。

しかし、以下のコメントから、比較についてもっと知りたいと思います。あなたがしていることを見てください:

Example     Name     Result
$a == $b    Equal    TRUE if $a is equal to $b after type juggling.

したがって、数値と文字列を厳密に比較することはできません。

数値を文字列と比較する場合、または比較に数値文字列が含まれる場合、各文字列は数値に変換され、比較は数値で実行されます。(REF

注:受け入れられた回答に記載されている整数ではなく、数値:

<?php
print "number of surprised persons: " . ('false' == 0.3 - 0.2 - 0.1);

楽しむ。

于 2011-10-12T18:43:17.963 に答える
3

false==0はtrueです。文字列は「1」であり、値を補間するときに暗黙的な変換を行っているため、Trueです。

$a = true;
echo "$a"; #1

PHPの真理値表はここにあります。==を使用する正当な理由がない限り、===コンパレータをお勧めします。

http://php.net/manual/en/types.comparisons.php

于 2011-10-12T18:43:26.310 に答える