【问题标题】:Performance: Empty string or null in PHP性能:PHP 中的空字符串或 null
【发布时间】:2012-06-12 17:38:49
【问题描述】:

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

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

【问题讨论】:

  • 这不是你问的,但是这些值有不同的含义。使用 null 表示“无值”(尚未分配值),使用空字符串表示恰好是空字符串的值。 PHP是一团糟,但这并不意味着您的代码也应该是一团糟。您将无法进行尽可能多的优化,因为您无法判断 PHP 解释器是否不会使您的努力变得无用。

标签: php types null string


【解决方案1】:

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

Null (see PHP docs) 基本上是“没有价值”,应该在尚未设置某些内容时使用。当某事为null 时,is_null($var) 将为真。

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

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

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

【讨论】:

  • 同意。如果你输出的是一个空字符串,你应该使用一个空字符串,如果没有其他原因,为了可读性。
  • 这不应该是null 对字符串操作的理论适用性的问题。当您在 php 输出标签中使用内联条件时,如果您知道我的意思,您并不是真的在寻找美。但是您的回答对于可能有类似疑问的人来说是很有启发性的。
【解决方案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 附加到空字符串要快得多
  • 除非您在具有 数十亿 次迭代的循环中执行此操作,否则从性能的角度来看这并不重要,因此请使用语义更合理的循环。

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2015-01-21
    • 2020-09-28
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多