2

私は次のコードを持っています:

<?php
    $val = 0;
    $res = $val == 'true';

    var_dump($res);
?>

上記の式のように、PHPは$ valをブール型(ゼロはfalseに変換されます)および文字列(空でない文字列はtrue)に型キャストしようとするため、$resは「false」である必要があるという印象を常に受け​​ていました。しかし、上記のコードを実行すると、出力は次のようになります。

boolean true

私は何かが足りないのですか?ありがとう。

4

3 に答える 3

3

PHPでは、空でない非数値の文字列はすべてゼロと評価されるため、0 == 'true'TRUEですが、0 === 'true'FALSEです。文字列はブール値にキャストされていませんが、文字列としてゼロtrueと比較されています。ゼロはブール値としてキャストされるのではなく、int値として残されます。したがって、最終的には次のようになります。

// string 'true' casts to int 0
0 == 0 // true

これを試して:

echo intval('true');
// 0
echo intval('some arbitrary non-numeric string');
// 0

PHPの型比較表を確認してください。一般に、PHPでブール比較を行い、型が同じでない場合(この場合はintからstring)、厳密な比較を使用することは価値があります。

于 2012-05-14T13:48:40.427 に答える
0

は最初の演算子であるため$val、PHPは文字列を0になる整数に変換しtrueます。結果として0 == 0となり、結果はtrueになります。

于 2012-05-14T13:49:04.130 に答える
0

これを試して

<?php
    $val = 1;
    $res = (bool)$val == 'true';

    var_dump($res);
?>
于 2012-05-14T13:51:13.567 に答える