【发布时间】:2026-01-24 13:15:01
【问题描述】:
编辑:我的错,我犯了一个错误,当我在这篇文章中说 null 时,我的意思是说 null 或空或零或假或任何使 (!$x) 为真的东西。
与朋友一起,我们正在尝试找到在变量为空时影响变量值的最佳方法。 我们想这样做:
if (!$x)
$x = 5;
我的朋友建议了一种单行解决方案:
!$x && $x = 5;
这里,如果 $x 为空,那么 $x = 5 将被 PHP 解释,因此 $x 将包含 5。 如果 $x 不为 null,则不会读取该行的第二部分,并且 $x 将保留其旧值。
简历:
$x null:一次获取,一次比较,一次设置。
$x 不为空:一次获取,一次比较
我试着做得更干净更好。首先,我想到了这个:
$x = $x ? $x : 5;
但是这里如果 $x 之前不为空,那么 PHP 会做一个额外的做作 ($x = $x),另外,这一行比上一行要长。
简历:
$x null:一次获取,一次比较,一次设置。
$x 不为空:两次获取,一次比较,一组($x = $x)。
然后我来了:
$x = $x ?: 5;
我们的操作比前一个少,而且我们的字符比第一个少。
简历:
$x null:一次获取,一次比较,一次设置。
$x 不为空:一次获取,一次比较,一组 ($x = $x)。
但我的问题是,当 PHP 必须这样做时:
$x = $x;
真的在做吗?如果不是,第三种解决方案(最后一种)是最好的。否则,第一个解决方案是最好的。
还有其他解决方案可以解决这个问题吗?
谢谢。
【问题讨论】:
-
请记住:
null与false不同 -
这在很大程度上取决于上下文。理想情况下,您将从编写简短的自包含函数开始,因此
$x可以是具有默认值的函数参数。那么这个问题就没有意义了。除此之外,随心所欲;但请注意,更少的代码不一定是理想的目标。结果必须可读且易于理解,而不是尽可能地混淆。 -
假设您正在寻找“最快”中的“最佳”,那么您自己尝试一下是无可替代的!
标签: php operator-keyword ternary