2

由于 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>

我知道它不会影响整体性能,但它可以与使用双引号或单引号相比吗?

4

2 回答 2

3
> 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
  • 除非您在具有数十亿次迭代的循环中执行此操作,否则从性能的角度来看这并不重要,因此请使用具有更好语义意义的循环。
于 2012-06-08T17:28:27.813 回答
2

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

Null(请参阅 PHP 文档)基本上是“没有价值”,应该在尚未设置某些内容时使用。当某事是nullis_null($var)将是真实的。

一个空字符串仍然是一个字符串,只是长度为 0。当你知道你有一个字符串但它没有内容时,你应该使用它。

所以真的取决于你的情况使用哪一个。当它们显示为字符串或回显时,两者都不会打印任何内容,但在内部它们仍然不同。在我看来,虽然对于这种情况,我会使用空字符串:

<div class="item<?= $is_selected ? ' selected' : '' ?>"></div>
于 2012-06-08T16:33:47.403 回答