Hatena::ブログ(Diary)

toriimiyukkiの日記 RSSフィード Twitter

2011年02月24日

PHPでダブルクォーテーションとシングルクォーテーションの処理速度の違い(ちょっと大人気なくコードレビュー)

結果だけ見たい人は一番下へスクロール。まぁ読んでいっても面白いとおもうけど。

今日もブログを書くので必死にネタ探しをしていたら、セッキーがこんな興味ある内容をやっていた。

PHPで ‘ と . を大量に繋げるのと “” で一括でやるのどっちがいいの?

http://sekki.net/wordpress/?p=65

<?php
$value = 'ミートボール';
$start = microtime(true);
 
for($i = 1;$i <1000;$i++){
//下記の2つで実験
//echo '私の大好きな'. $value. ' ヴぁー';
//echo '私の大好きな${valu}eヴぁー';
}
$end = microtime(true);
echo "<br />\n";
echo $end - $start. '秒処理にかかった';

と、ここまで結果は「後者の方が早かった」のだそうだ。

f:id:toriimiyukki:20110224211331j:image:left




おわかりいただけただろうか

―――――ある男子生徒の右肩に謎の手が






じゃなく、このコードよく読んで欲しい。おかしな点が幾つかある。

おかしなと言っても行数で言うと1行だが

<?php
echo '私の大好きな${valu}eヴぁー';

これ、満足のシングルクオーテーションである。さらにこれをダブルクオーテーションにしたところでタイポしてるのである。

正確には「echo "私の大好きな${value}ヴぁー";」とやりたかったのだと思う。


ということで、ここからは人のブログのネタを借りて書こうとおもう。メシウマ

まずどういう事なのか?

これはもともとPHPにおけるシングルクオーテーションとダブルクオーテーションの違いで、ダブルクオーテーションの場合は中身に変数名を書くとそのまま変数の中身を表示してくれるのである。

予想

シングルクオーテーションが絶対的に早いんだと思う

実験

<?php
<?php
$value = 'ミートボール';
$start = microtime(true);

for($i = 1;$i <1000;$i++){
	//echo '私の大好きな'.$value.' ヴぁー';
	//echo "私の大好きな${value}ヴぁー";
	//echo "私の大好きな{$value}ヴぁー";
}

$end = microtime(true);
print_r($end-$start);

これでテストしてみようと思う。ちなみにコメントアウト部分は行読み込みの時間で差が発生すると嫌なのでテスト時には置き換えている。

結果

  • シングルクオーテーション
0.0021991729736328
0.0092661380767822
0.0065670013427734
0.0046350955963135
0.0107960700988770
    • 平均:0.00669269561767578
  • ダブルクオーテーション1
0.0079121589660645
0.0073711872100830
0.0057492256164551
0.0106539726257320
0.0074558258056641
    • 平均:0.00782847404479974
  • ダブルクオーテーション2
0.0103878974914550
0.0095968246459961
0.0150389671325680
0.0154509544372560
0.0121028423309330
    • 平均:0.01251549720764160

考察

微妙にシングルクオーテーションが買っている。0.001秒差だが。

まぁチューニングの世界なんてそんなもんだフハハハハハハハ

と思っても、納得がいかないので。

実験2

<?php
$value1 = 'ミートボール';
$value2 = 'オムライス';
$value3 = 'ちくわ';
$value4 = 'カレー';
$value5 = 'えのき';
$value6 = 'ネギ';
$value7 = '納豆';
$value8 = 'ごはん';
$value9 = 'おかず';
$start = microtime(true);

for($i = 1;$i <1000;$i++){
	echo '私の大好きな'.$value1.''.$value2.''.$value3.''.$value4.''.$value5.''.$value6.''.$value7.''.$value8.''.$value9.'ヴぁー';
	echo "私の大好きな${value1}${value2}${value3}${value4}${value5}${value6}${value7}${value8}${value9}ヴぁー";
}

$end = microtime(true);
print_r($end-$start);

結果2

  • シングルクオーテーション
0.0220370292663570
0.0145778656005860
0.0128278732299800
0.0118119716644290
0.0137329101562500
    • 平均:0.0149975299835204
  • ダブルクオーテーション1
0.0125031471252440
0.0254380702972410
0.0092329978942871
0.0132520198822020
0.0093510150909424
    • 平均:0.0139554500579833

         __ , -------- 、__

      , - ':::::::::::::::::::::::::::::::::::::::::\

     / ;;;;;;;::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;\

    /,,;,,,,,  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ,,,,,,,;:::丶

   / :::::::::;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;:::::::::::::::ヽ

   i゙:::;:::::||::::::ii:::::::::::||::::::::::::::::::;:::::::::::::::::::::::::::゙i

  i゙::::|;;;;| |;;;;| |::::::::::| |:::::::::::::::::||:::::::::::::::::::::::::::::|

 . i゙::::::i     ''''''''''' '───' |;;;;;;;;;;::::::::::::::::::::|

  .|:::::::|,-====-´  ゙ヽ,,,,,,,,,,,,、    |:::::::::::::::::::|

  |;::::::::|,-----、    ~ニニ,,_`    |:::::::::::::::::::|

  `ヽ、i (、i´ノ     ´い,, ノ '    |;;;::::::::::::::/   なんで、PHPうらぎるん?

  .   i ^~~~ー==--  ー'-+、     / ゙-、;;;;/

     {      ヽゝ          '-'~ノ

    λ   ''゙゙゙'''-''---、       /-'^

     ヽ,    ^~^         (

     /  `丶 、     , -   /^l

     |   /( ノ `''''''´~  __, - '  ゙i、

    {  / /| ̄ ̄ ̄ ̄   _,- '¨ }

    {/ /  ゙ー────'~   \|

    /               ヽ  \

考察2

なぜか、大量の結合ではシングルクオーテーションよりダブルクオーテーションのほうが早いらしい。。。

そんな、、、、、今までPHPのことを信用してきたのに。。。。。

これなら見栄えよい+早いで圧倒的にダブルクオーテーションのほうがいいやないの!!!納得いかぬ!!!

まとめ

これからはダブルクオーテーションを使え!

(使い分けたほうがいいけどね・・・)

注意

この実験は、自宅サーバーにおいて行いました。

行っている環境、PHPのバージョンによって少し違うかもしれません。(実験は5.1.6で行いました)

また、PHPのシングルクオーテーション・ダブルクオーテーションについて何か知っているよ!という方は是非コメントでお願いします。

   2011/02/26 02:21 なかなか興味深い記事ですね。参考になりますたw

DOZENDOZEN 2011/04/24 02:44 えーーーーっ!?
シングルクォーテーションの方が速いよと言われてからできるだけシングルクォーテーションを使ってきたのに・・・。

あ、そういえばechoって、.より,の方が速いと聞いたんですが

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証