0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPによる型の比較について

Last updated at Posted at 2021-01-15

概要

以下の記載によると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になっちゃうみたいですね。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?