LoginSignup
7
6

More than 5 years have passed since last update.

”あいうえお”(文字列) == 0が真 の謎

Posted at

かなり前、少し悩んだことがあった。
以下の処理をみていただきたい。

<?php
if ("あああ" == 0) {
    echo "真です。";
} else {
    echo "偽です。";
}
?>

これの実行結果は
「真です。」
となる。

納得がいかないが、PHPは文字列と数値を比較演算子で解釈する場合、
文字列を数値に変換して比較するというルールがある。
文字列に含まれる数値との比較をしているらしい。

上記のケースは数値を含まないので0である。
検証してみたが数値が含まれる場合、最も前に現れた数値を採用するみたいだ。
例えば
"ああ67ああ1いい27"
という文字列の場合、67として解釈・比較される。

ということで文字列と数値を比較する可能性がある場合、
下記のように三重等号(===)で比較すると確実ですね。

<?php
$letter = "あいうえお";
if ($letter === 0) {
    echo "真です。";
} else {
    echo "偽です。";
}
?>

この実行結果は型が異なっている為、
「偽です。」
となる。

7
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6