スポンサーリンク

PHP文字列であるか調べるときに、empty()を使ったり、比較演算子を使ったりします。

empty()を使って、こう書いたり、

<?php
if (empty($str)) {
	doit($str);
}
?>

== (または、 === ) を使って、こう書いたりします。
<?php
if (''==$str) {
	doit($str);
}
?>

empty()を使うと、表記的には、人間に優しいのかなと思いますが、empty()を使うのはそれが理由でしょうか。

empty()と比較演算子(==,===)の比較を考えるとき、empty()のほうが関数呼び出しのオーバーヘッドがあり、比較演算子の場合、関数呼び出しのオーバーヘッドがないため、比較演算子が関数よりも高速に動作することが容易に想像できます。

比較演算子の==と===を考えると自動的な型変換のない===が==よりも高速に動作します。

というわけで、一応、PHPのpearのBenchmarkのTimerを利用して、ベンチーマークをしてみました。

ソースコード

<?php
include ('Benchmark/Timer.php');

function use_empty ($count) {
	$x = 'hoge';
	for ($i = 0; $i < $count; ++$i) {
		$x = empty($x) ;
	}
}
function use_equal ( $count ) {
	$x = 'hoge';
	for ($i = 0; $i < $count; ++$i) {
		$x = ('' == $x) ;
	}
}
function use_equal3 ( $count ) {
	$x = 'hoge';
	for ($i = 0; $i < $count; ++$i) {
		$x = ('' === $x) ;
	}
}

$count = 1000;

echo $count, PHP_EOL;


$oTimer =& new Benchmark_Timer();
$oTimer->start ();
use_empty ($count);
$oTimer->setMarker( 'empty 1' );
use_empty ($count);
$oTimer->setMarker( 'empty 2' );
use_empty ($count);
$oTimer->setMarker( 'empty 3' );

use_equal ($count);
$oTimer->setMarker( 'equal 1' );
use_equal ($count);
$oTimer->setMarker( 'equal 2' );
use_equal ($count);
$oTimer->setMarker( 'equal 3' );

use_equal3 ($count);
$oTimer->setMarker( 'equal3 1' );
use_equal3 ($count);
$oTimer->setMarker( 'equal3 2' );
use_equal3 ($count);
$oTimer->setMarker( 'equal3 3' );

$oTimer->stop ();
$oTimer->display ();
?>

100回比較ベンチマーク

100
------------------------------------------------------
marker    time index            ex time         perct   
------------------------------------------------------
Start     1201971619.99956700   -                0.00%
------------------------------------------------------
empty 1   1201971619.99984300   0.000276        27.63%
------------------------------------------------------
empty 2   1201971619.99993200   0.000089         8.91%
------------------------------------------------------
empty 3   1201971620.00002200   0.000090         9.01%
------------------------------------------------------
equal 1   1201971620.00012000   0.000098         9.81%
------------------------------------------------------
equal 2   1201971620.00020800   0.000088         8.81%
------------------------------------------------------
equal 3   1201971620.00029500   0.000087         8.71%
------------------------------------------------------
equal3 1  1201971620.00037900   0.000084         8.41%
------------------------------------------------------
equal3 2  1201971620.00045800   0.000079         7.91%
------------------------------------------------------
equal3 3  1201971620.00053700   0.000079         7.91%
------------------------------------------------------
Stop      1201971620.00056600   0.000029         2.90%
------------------------------------------------------
total     -                     0.000999       100.00%
------------------------------------------------------


100回比較した場合のかかった時間の比較。

関数,比較演算子 実行時間
empty() 0.000090
== 0.000088
=== 0.000079

1000
------------------------------------------------------
marker    time index            ex time         perct   
------------------------------------------------------
Start     1201971122.94382100   -                0.00%
------------------------------------------------------
empty 1   1201971122.94467500   0.000854        15.53%
------------------------------------------------------
empty 2   1201971122.94529600   0.000621        11.29%
------------------------------------------------------
empty 3   1201971122.94590700   0.000611        11.11%
------------------------------------------------------
equal 1   1201971122.94652600   0.000619        11.26%
------------------------------------------------------
equal 2   1201971122.94713000   0.000604        10.98%
------------------------------------------------------
equal 3   1201971122.94774000   0.000610        11.09%
------------------------------------------------------
equal3 1  1201971122.94825800   0.000518         9.42%
------------------------------------------------------
equal3 2  1201971122.94877700   0.000519         9.44%
------------------------------------------------------
equal3 3  1201971122.94929400   0.000517         9.40%
------------------------------------------------------
Stop      1201971122.94932000   0.000026         0.47%
------------------------------------------------------
total     -                     0.005499       100.00%
------------------------------------------------------

1000回比較した場合のかかった時間の比較。

関数,比較演算子 実行時間
empty() 0.000611
== 0.000604
=== 0.000517

というわけで、予測通り、期待した結果が得られました。

  • === が == や empty()より速い
  • == が empty()より速い
比較する方法はいくつもありますが、それぞれによってパフォーマンスが異なります。
参照しているページ (サイト内): [2008-01-31-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー