LoginSignup
16
14

More than 5 years have passed since last update.

phpのコーテーション

Posted at

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

実行速度

代入のみ

以下のようなプログラムを作成

singleQuotes.php
<?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

誤差と言っても良いぐらいの速度差ではある。

変数展開

変数展開の速度も試す

singleQuotes.php
<?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はたまに使いますが使用回数多いところでは考えものかも知れませんね。

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14