2012-06-08 70 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