php的引号
我查了一下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
阅读的方式 de
首先,我不确定是用引号还是括号,因为不同的物品可能有不同的发音,所以我向谷歌翻译询问了一下。
-
- ダブルコーテーション => 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";
还创建了一个名为doubleQuotes.php的文件,将对$str的赋值从单引号改为双引号。
$ 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的速度。
$ diff singleQuotes.php sprintf.php
6c6
< $str2 = 'hi' . $str1 . 'hi';
---
> $str2 = sprintf('hi%shi', $str1);
执行十次并比较平均值
$ for i in `seq 1 10`; do php sprintf.php ;done;
370
371
378
382
401
394
415
396
402
385
# 平均値 389.4
听说相比于单引号,需要花费大约三倍的时间。
概括起来
在中文中的同义表达为:
是由于单引号更快速吗?
双引号可以使代码看起来更整洁,但可能会影响执行速度。
虽然可能并不是太值得担心的问题。
虽然偶尔我会使用sprintf,但在使用频率较高的情况下,可能需要考虑一下。