概要
以下の記載によるとPHPは比較対象の型は異なっていてもTRUEになってしまうらしい。
https://www.php.net/manual/ja/migration80.incompatible.php
0 == "0" はTRUEになるから、型の一致まで検証するなら 0 === "0" にする必要があるようです。
実践(PHP)
PHPで簡単な処理を書いてみました。
本当に0 == "0"はtrueになるみたいです。
<?php
if (0 == "0") {
echo "true";
} else
echo "false";
?>
実行結果
% php test.php
true
次は以下のコードで実行してみます。
変更点は「if (0 == "0")」が「if (0 === "0")」に変わっただけです。
<?php
// 比較対象の型も検証する
if (0 === "0") {
echo "true";
} else
echo "false";
?>
実行結果
% php test.php
false
型の検証まで行うとfalseになることを確認できました。
実践(Ruby)
Rubyだと「0 == "0"」は数値と文字列は比較不能なのでfalseになりました。
これは想定通りです。
if 0 == "0" then
puts "true"
else
puts "false"
end
実行結果
% ruby test.rb
false
実践(Python)
Pythonでも「0 == "0"」は型が違うのでfalseになりました。
これも想定通りです。
if 0 == "0":
print("true")
else:
print("false")
% python test.py
false
まとめ
PHPはRubyやPythonと設計思想が違うようです。
PHPは比較対象の内容が合ってればいい、ということで数値の0も文字列の0もtrueになっちゃうみたいですね。