2010-07-23 42 views
19

是更好地串聯一個變量(比如,$name)到現有的字符串(比如,$string)是這樣的:單引號或雙引號變量串聯?

$string='Hi, my name is '.$name 

或嵌入變量字符串像這樣:

$string="Hi, my name is $name"; 

或者是它最好使用這樣的功能:

$string=sprintf("Hi, my name is %s",$name); 

這在處理器時間/效率方面更好?

+0

我會說,這取決於數據來自哪裏...用戶輸入或系統輸入 – Prix 2010-07-23 07:20:16

+0

會有性能差異嗎?即每個處理器的時間更多? – ina 2010-07-23 07:22:19

+1

[PHP - 「Sal's mall is $ emo」vs「Sal's mall is」。$ emo - string with quotes concatenation efficiency](http://stackoverflow.com/questions/3394166/php-sals-mall-is -emo-vs-sals-mall-is-emo-string-with-quotes-concaten) – 2011-01-23 22:44:30

回答

25

大家誰做的測試得出結論,使用單引號是稍微更好的性能明智。最後,單引號只會導致連接,而雙引號會強制解釋器解析變量的完整字符串。

然而,在這樣做的附加載荷是PHP,大部分的時間得出的結論是,它並沒有真正的問題的最後一個版本,所以小。

所以對於性能的人:使用單引號。對於「我喜歡我的代碼可讀」 - 人們:正如Flavius Stef已經指出的那樣,雙引號的可讀性要好得多。

編輯:有一兩件事 - 如果你打算使用一個單一的美元在字符串中沒有變量,使用單引號是肯定的! (http://www.weberdev.com/get_example-3750.html指出,這將需要更長的時間的4倍來解析這些字符串)

+7

「所有測試過的人......」數據源? – ina 2010-07-23 07:34:44

+1

http://classyllama.com/development/php/php-single-vs-double-quotes/ http://www.procata.com/blog/archives/2005/03/08/microbenchmarks-of-single-和雙重qouting/ 這裏是2.谷歌可以給你更多。 – Blizz 2010-07-23 07:41:47

+0

我認爲測試甚至不是必需的。這只是一些處理器指令的問題。你越少(在這種情況下可以很容易猜測),你就越快。 – snowflake 2010-07-23 08:14:35

0

從語法的角度來看並不重要。兩種變體都是正確的。使用你感覺更舒適的東西。

就個人而言,使用$string="Hi, my name is $name"的時候,因爲你並不需要亂用引號我感覺好多了。只需將複雜的SQL查詢映射爲10個變量...

7

我通常認爲使用字符串插值("Hi, my name is $name")從易讀性的角度來看更好。

-5
$string='Hi, my name is '.$name 

這是最好的方式,在PHP和HTML結合的感覺!

或像這樣:

$string="Hi, my name is $name"; 

這是老樣子!

或者這樣:

$string=sprintf("Hi, my name is %s",$name); 

這是從Visual Basic或其他客戶端編程語言來編程會寫!

我希望我是有幫助的。

+1

我不同意''你好,我的名字是$ name'''是「老」,並且''嗨,我的名字是'。$ name'好多了! – Josh 2011-01-23 22:47:40

0

個人而言,如果它只是一個正常的變量,甚至是類屬性,我會寫這樣的:

$newVarA = "This is some text with a $variable"; 
$newVarB = "This is some more text, written in $settings->language"; 

不過,如果我使用數組值,那麼我會跟單串聯引號。

$newVarC = 'This is some text from a ' . $text['random'] . ' array'; 

希望這是有道理的。這完全是爲了找到習慣並堅持下去。

+0

你的數組示例工作得很好,沒有連接。 '...來自{$ text ['random']}數組',或者來自$ text [random]數組''。如果您引用了多維數組,則只有*有*使用{}方法,因爲PHP的解析器不是貪婪的。 '$ array [x] [y]'將被解析爲'的內容。 – 2010-07-23 17:26:40

+0

是的。但是我發現在字符串中使用大括號對我來說有點醜陋。就像我說的,這只是我個人如何將字符串與變量連接起來的一個例子。 – 2010-07-24 09:22:04

11

PHP中單引號和雙引號的區別在於,雙引號是「智能」的,因爲它們在讀取時會解析變量,而單引號是「啞」,並且不會嘗試解析字符串中的任何字符。

這些會導致您可以使用哪些字符的一些細微差異;基本上,你需要使用單引號時逃跑的唯一字符是一個單引號本身:

'\'' 

而如果使用雙引號,你必須逃脫其他字符:

"\$" 

但它也允許像添加新行到最後一些漂亮的東西:

"my string\n" 

單引號,你就必須做一個串聯:

'my string' . chr(10) 
'my string' . "\n" 

通常,單引號的速度更快,因爲它們是「啞」。

但是,通常不應該擔心這些問題,即所謂的過早優化,應該避免。

一對夫婦有關優化的話:一般應該先寫程序就應該工作的方式,然後找到的最大的瓶頸和解決這些特殊的人。如果字符串速度在PHP中確實是一個問題,您可能需要考慮切換到另一種語言。

關於速度:你可能要更專注於內存使用率比CPU時間。在這些情況下,CPU時間可以被認爲是非常穩定的。在編寫迭代多次的算法時,CPU時間更爲重要。

關於級聯:你越串連使用點運算符,你將使用更多的內存字符串。

考慮一下:

$str1 = 'asdf'; 
$str2 = 'qwer'; 

// this will result in more memory being allocated for temporary storage 
echo $str1 . $str2; 

// this will not allocate as much memory as the previous example 
echo $str1; 
echo $str2; 
+2

另一種方式:'echo $ str1,$ str2;' – nyuszika7h 2011-01-24 08:42:16

0

我的座右銘,並回答是:交給編譯器編寫的機器代碼。我會告訴你我的意思是...

當您不需要包含PHP變量時使用單引號,否則使用雙引號。 不用擔心性能,只需在生產服務器上使用APC即可。而是專注於編寫最易維護的代碼;儘量使用註釋,雙引號等等,儘管它們可能會降低代碼速度。每種優化都會降低代碼的可維護性/可讀性,因此請將其交給操作碼緩存和編譯器,以便將代碼轉換爲機器代碼,而不要自己這樣做......因爲優化而導致原始代碼混淆。

5

出於性能,正如其他人證明,這是稍快使用單引號,而不是雙引號。

單引號,如果應用於可讀性科學,遠離主觀性,實際上會增加更多的「噪音」。噪音及其與可讀性之間的關係在「清潔代碼」一書中討論過很多,可以得出結論:您必須看到更多的非空白字符,它越會妨礙可讀性。如果適用於主觀性,我花時間閱讀的大多數地方實際上更喜歡單引號。

使用你的判斷。

$var = "My $string with $lots of $replacements." 

比更可讀:

$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.'; 

我承認:

$var = "My string."; 

看起來幾乎一樣:

$var = 'My String.'; 

但是後者介紹更少的噪音以及有很多代碼的時候每一點都有幫助,更不用說使用單引號獲得的其他好處。

最後,我更喜歡KISS。除非需要雙引號,否則請使用單引號。簡單的約定更易於輸入,更容易維護,更易於分析和閱讀。