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開発者をサポートする情報を掲載しています。