PHPでの比較を行う場合、大抵は「==」「!=」を使用すると思います。ただし、巨大なデータを処理する際のパフォーマンスが問題になる場合は、「===」「!==」を使用することをオススメします。今回は2種類の演算子でのパフォーマンスの違いを見てみます。
「===」と「==」の違いは型が同じかどうかをチェックするかどうかです。「===」では型のチェックを行うので「12 === '12'」はfalseとなります。同様に「12 !== '12'」はtrueとなります。
型のチェックを行うのだから、パフォーマンスは「===」の方が低くなると思うかもしれませんが、実際は高いのです。「==」では型の変換処理を内部で実行しようとするためで、型の変換をしないで比較を行う「===」の方が高速なのです。
まずは以下のスクリプトを見てください。
<?php
$MAX = 10000000;
$hoge = "abcdefg";
for ($i = 0; $i < $MAX; $i++) {
if ($hoge == "abcdefg")
}
これを test_default.php とします。「===」を使用したスクリプトをtest_strict.php とします。これをtimeコマンドを使用して調べます。また、基本部分の実行スピードを調べるために、以下のtest_base.phpも使用します。
<?php
$MAX = 10000000;
$hoge = "abcdefg";
for ($i = 0; $i < $MAX; $i++) {
// if ($hoge == "abcdefg")
}
テストの結果は以下のようになりました。
$ time php test_default.php
real 0m4.785s
user 0m4.771s
sys 0m0.009s
$ time php test_strict.php
real 0m3.826s
user 0m3.817s
sys 0m0.006s
$ time php test_base.php
real 0m2.217s
user 0m2.210s
sys 0m0.006s
if文の判定にかかる時間は「==」の場合で2.5秒、「===」の場合で1.6秒となり、3割は早くなりました。
また、数値文字列同士の比較(「"12"=="12"」と「"12"==="12"」)では3.6秒と1.6秒と、差がかなり大きくなりました。数値文字列同士の比較では数値への変換が行われ、そこで速度の低下が起きてしまいます。
ただし、「===」を使う場合には注意する点もあります。たとえば、POSTやGETのデータは文字列となってしまうので、その値と数値を「===」で比較する場合は、POSTやGETの変数を数値にキャストする必要があります。
文字列同士の比較であれば、「===」の方が高速なので使うようにしましょう。ただし、数値比較に関しては、数値文字列が混入すると問題になるのであれば、「==」を使用した方が無難かもしれません。
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。