phpのダブルコーテーションとシングルコーテーションを調べたのでメモ
phpのバージョンは5.3.15
$ php --version
PHP 5.3.15 with Suhosin-Patch (cli) (built: Aug 28 2012 18:19:13)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
読み方
まずコーテーションなのかクォーテーションなのか、
物によっては読み方色々でどっちが正しいのか不明だったので
Google翻訳さんに聞いてみました。
-
ダブルコーテーション => Double quotes
-
ダブルクォーテーション => Double quotes
-
Double quotes => 二重引用符
-
二重引用符 => Double quotes
-
シングルコーテーション => Single quotes
-
シングルクォーテーション => Single quotes
-
Single quotes => 単一引用符
-
単一引用符 => Single quotes
どっちでも良いかな。二重引用符とか単一引用符の方が噛まずに済みそうではある。
違い
- ダブルクォーテーション ・・・ 文字列中の変数を変数値に置換する
- シングルクォーテーション ・・・ 文字列中の変数を変数値に置換しない
実行内容はこんな感じ
<?php
echo '\n'; # \n
echo "\n"; # 改行される
$pinch = '(/・ω・)/ピンチ!';
echo '\(・ω・\)SAN値!$pinch'; # \(・ω・\)SAN値!$pinch
echo "\(・ω・\)SAN値!$pinch"; # \(・ω・\)SAN値!(/・ω・)/ピンチ!
$str = 'c';
echo 'ab$strd'; # ab$strd
echo "ab$strd"; # ab
echo "ab $str d"; # ab c d
echo "ab$str d"; # abc d
echo "ab$strにd"; # ab
echo "ab{$str}d"; # abcd
class Huge{
function foo() {
return 'hi';
}
}
$huge = new Huge;
echo "hoo $huge->foo()"; # hoo ()
echo "hoo {$huge->foo()}"; # hoo hi
実行速度
代入のみ
以下のようなプログラムを作成
<?php
$start = time();
$count = 1000000000;
for ($i=0;$i<$count;$i++) {
$str = 'hihi';
}
$end = time();
echo $end - $start . "\n";
$str
への代入を単一引用符から二重引用符へ変更したdoubleQuotes.php
も作成
$ diff doubleQuotes.php singleQuotes.php
5c5
< $str = "hihi";
---
> $str = 'hihi';
10回ずつ実行して平均値を比べる
$ for i in `seq 1 10`; do php singleQuotes.php ;done;
92
97
100
94
102
93
101
100
77
90
# 平均値 94.6
$ for i in `seq 1 10`; do php doubleQuotes.php ;done;
101
95
100
77
111
96
78
107
98
100
# 平均値 96.3
誤差と言っても良いぐらいの速度差ではある。
変数展開
変数展開の速度も試す
<?php
$start = time();
$count = 1000000000;
$str1 = 'hi';
for ($i=0;$i<$count;$i++) {
$str2 = 'hi' . $str1 . 'hi';
}
$end = time();
echo $end - $start . "\n";
$ diff singleQuotes.php doubleQuotes.php
6c6
< $str2 = 'hi' . $str1 . 'hi';
---
> $str2 = "hi{$str1}hi";
10回ずつ実行して平均値を比べる
$ for i in `seq 1 10`; do php singleQuotes.php ;done;
140
140
141
136
139
141
121
153
141
143
# 平均値 139.5
$ for i in `seq 1 10`; do php doubleQuotes.php ;done;
138
168
165
160
162
177
142
175
170
170
# 平均値 162.7
二重引用符での変数展開だと若干遅くなるみたい。
sprintf
ちなみにsprintf
での速度も見てみる
$ diff singleQuotes.php sprintf.php
6c6
< $str2 = 'hi' . $str1 . 'hi';
---
> $str2 = sprintf('hi%shi', $str1);
10回ずつ実行して平均値を比べる
$ for i in `seq 1 10`; do php sprintf.php ;done;
370
371
378
382
401
394
415
396
402
385
# 平均値 389.4
単一引用符に比べると3倍ほど時間がかかるようです。
まとめ
単一引用符早いってことでしょうか。
二重引用符だと見た目奇麗に書けるけども実行速度と相談でしょうか。
そんなに気にする物では無いかもですが。
sprintf
はたまに使いますが使用回数多いところでは考えものかも知れませんね。