かなり前、少し悩んだことがあった。
以下の処理をみていただきたい。
<?php
if ("あああ" == 0) {
echo "真です。";
} else {
echo "偽です。";
}
?>
これの実行結果は
「真です。」
となる。
納得がいかないが、PHPは文字列と数値を比較演算子で解釈する場合、
文字列を数値に変換して比較するというルールがある。
文字列に含まれる数値との比較をしているらしい。
上記のケースは数値を含まないので0である。
検証してみたが数値が含まれる場合、最も前に現れた数値を採用するみたいだ。
例えば
"ああ67ああ1いい27"
という文字列の場合、67として解釈・比較される。
ということで文字列と数値を比較する可能性がある場合、
下記のように三重等号(===)で比較すると確実ですね。
<?php
$letter = "あいうえお";
if ($letter === 0) {
echo "真です。";
} else {
echo "偽です。";
}
?>
この実行結果は型が異なっている為、
「偽です。」
となる。