【PHP】’(シングルクォーテーション)と”(ダブルクォーテーション)はどちらを使うべきか(PHP高速化)

それぞれの特徴として
- シングルクォーテーション:囲った中身を文字列として扱い、変数、制御文字列もただの文字列として扱う
- ダブルクォーテーション:囲った中身を文字列として扱うが、変数、制御文字列は元々の元として扱う
一般的に全て文字列として扱う為、コード内の文字列はシングルクォーテーションで囲うほうが速度が早く良いと言われています。
本当に全てをシングルクォーテーションに変えたほうがシステムとして良いのか検証してみたいと思います。
動作の違い
変数や制御文字列の扱いが異なると記述しましたが、具体的にどう異なるのかを解説します。
PHPで以下の記述を行った際に出力結果がどう変わるのかをまとめました。
実行コード
$str = "文字列";
echo '表示$str';
echo "表示$str";
echo "表示{$str}";
echo '表示文字列\n';
echo "表示文字列\n";
出力結果
表示$str 表示文字列 表示文字列 表示文字列\n 表示文字列(表示上改行される)
シングルクォーテーションの場合は制御文字列、変数がそのまま文字列として出力されています。
しかし、ダブルクォーテーションはそのまま変数中身や制御文字列として出力しています。
これは文字列連結を行う上で可読性がかなり高くなります。
しかし、外部から何が入ってくるかわからない場合は、外部から制御文字列などを入力されてしまう危険性があります。
ですので可読性とセキュリティを考えどのような文字列なのかを考えたほうが良いでしょう。
また、”表示$str”、”表示{$str}”この2つの記述は同じ結果になりますが
渡ってくる変数が配列だった場合
echo "表示$str['str']";
echo "表示{$str['str']}";
この2種類のコードを動作させた場合
上はエラーになり、下は正常に動作するといった差が出てきます。
単純代入の場合の速度比較
以下のコードでクォートを変え速度比較を行います。
for ($i=0; $i<=100000000;$i++) {
$str = "abcdefghijklmno";
}
- 1バイト文字列の場合
- シングルクォーテーション
real 0m4.175s user 0m4.157s sys 0m0.006s
- ダブルクォーテーション
real 0m4.148s user 0m4.126s sys 0m0.012s
- 2バイト文字列の場合
- シングルクォーテーション
real 0m4.071s user 0m4.050s sys 0m0.010s
- ダブルクォーテーション
real 0m4.133s user 0m4.115s sys 0m0.013s
確かにシングルクォーテーションの方が全ての場合で早くなりました
1億回繰り返して速度差は一番大きいところで0.6msとなっていました。
つまりシングルクォーテーションとダブルクォーテーション1個分の差は0.000000006msの差が出ています。
文字列連結する場合の速度比較
以下のコードでクォートを変え速度比較を行います。
$str_tmp = 'abcdefghijklmno';
for ($i=0; $i<=100000000;$i++) {
$str = 'abcdefghijklmno'.$str_tmp;
}
- シングルクォーテーション
real 0m7.122s user 0m7.062s sys 0m0.047s
- ダブルクォーテーション
real 0m9.014s user 0m8.930s sys 0m0.066s
文字列を連結するという処理が入る為、単純な代入よりも時間がかかっています。
シングルクォーテーションとダブルクォーテーションの速度差もほぼ無い状態でした。
文字列比較する場合の速度比較
以下のコードでクォートを変え速度比較を行います。
$str = "abcdefghijklmno";
for ($i=0; $i<=100000000;$i++) {
if ($str == "abcdefghijklmno") {
}
}
- シングルクォーテーション
real 0m5.088s user 0m5.068s sys 0m0.009s
- ダブルクォーテーション
real 0m4.976s user 0m4.963s sys 0m0.009s
こちらは代入と比べ格段速度が早いようです。
シングルクォーテーションとダブルクォーテーションの速度差も無い為、どちらを採用しても問題がなさそうです
どちらを使用したほうが良いのか
やはり、一般的に言われているようにシングルクォーテーションを使用したほうがシステムとしては僅かですが早くなると思います。
特に大規模で、多量のアクセスを裁かなければならないシステム程この効果は大きいでしょう。
ですが、文字列を連結する際は文字列の中に変数を直接記述できるダブルクォーテーションの方が可読性が高いです。
ですので、基本的にシングルクォーテーションを使用し、必要な箇所でダブルクォーテーションを使用するように心がける事で
より質の高いシステムを組むことができると思われます。
コラム
人気コラム
-
Webサイト制作Webデザイン
レスポンシブも対応!綺麗で見やすい表のデザイン11個[HTML&CSS]
-
SEO対策SEO最新情報
新世代検索エンジン「ダックダックゴー(DuckDuckGo)」とは?Googleとの違いは?
-
Webサイト制作サイト制作
CSSだけ!レスポンシブなサイトの作り方と鬼ほど使うプロパティ
-
Webサイト制作サイト制作
【CSS】結局レスポンシブでのフォントサイズはどう書くべき?
-
Google関連SEO対策
Googleの検索履歴を残さない方法や削除・非表示にする方法を解説
-
Webサイト制作サイト制作
フローティングメニューとは?フローティングメニューの種類と実装例をご紹介