2012-06-08 67 views
2

由於PHP平等地對待他們的字符串操作和輸出,我想知道什麼是最好的做法,分配/連接一null值或空字符串:性能:在PHP空字符串或NULL

$lang = 'lang'; 
$suffix = null; 
$lang .= $suffix; 

$desc = 'name'; 
$suffix = ''; 
$desc .= $suffix; 

這也可以是內聯的條件的情況下:

<div class="item<?= $is_selected ? ' selected' : null ?>"></div> 

<div class="item<?= $is_selected ? ' selected' : '' ?>"></div> 

我知道這會不會影響整體性能,但可以把它比作使用雙或單引號?

+1

這不是你所問的,但是這些值有不同的含義。對「沒有值」(未分配值)使用null,對於恰好爲空字符串的值使用空字符串。 PHP是一團糟,但這並不意味着你的代碼也應該混亂。您無法很好地進行優化,因爲您無法分辨您的努力是否會被PHP解釋器無用。 – Yuriy

回答

2
> php --version 
PHP 5.3.12 with Suhosin-Patch (cli) (built: May 9 2012 11:44:31) 
Copyright (c) 1997-2012 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies 
    with Suhosin v0.9.33, Copyright (c) 2007-2012, by SektionEins GmbH 
php > $start = microtime(true); for($i = 0; $i < 1000000; ++$i) { $str = 'foo'; $str .= null; } printf('%.5f', microtime(true) - $start); 
0.15258 
php > $start = microtime(true); for($i = 0; $i < 1000000; ++$i) { $str = 'foo'; $str .= ''; } printf('%.5f', microtime(true) - $start); 
0.11397 

這跑了幾次,每次都得到了非常相似的結果。

結論:

  • 追加一個空字符串,字符串是不是追加null爲空字符串非常稍快
  • 除非你在循環中做這個循環,否則從性能的角度來看它並不重要,所以使用更好的語義。
2

PHP中的空字符串和空字符串不完全相同。

Null (see PHP docs)基本上是「沒有價值」,應該在尚未設定的情況下使用。當某事是null時,is_null($var)將成立。

空字符串仍然是一個字符串,只是長度爲0.您應該在知道您有字符串但沒有內容時使用該字符串。

所以真的取決於你的情況使用哪一個。當它們顯示爲字符串或回顯時,兩者都不會打印任何東西,但在內部它們仍然不同。在我看來,雖然這種情況下,我將使用空字符串:

<div class="item<?= $is_selected ? ' selected' : '' ?>"></div> 
+0

同意。如果您輸出的是空字符串,則應使用空字符串(如果沒有其他原因)爲了可讀性。 – primo

+0

這不應該是字符串操作的'null'的理論適合性的問題。當你在php輸出標籤中使用內聯條件時,如果你知道我的意思,你並不是真的在尋找美麗。但是對於那些可能有類似疑問的人來說,你的回答是非常有啓發性的。 – keystorm