编辑:我的错,我犯了一个错误,当我在这篇文章中说null时,我打算说null或空或零或假或任何使($ $ x)为真的。 < / p>
与朋友一起,如果此变量为null,我们正在尝试找到影响变量值的最佳方法。 我们想这样做:
if (!$x)
$x = 5;
我的朋友提出了一个单行解决方案:
!$x && $x = 5;
这里,如果$ x为null,则PHP将解释$ x = 5,因此$ x将包含5。 如果$ x不为null,则不会读取该行的第二部分,$ x将保留其旧值。
恢复:
$ x null:一次获得,一次比较,一次
$ x not null:一次获得,一次比较
我努力做得更清洁,更好。首先,我来到这里:
$x = $x ? $x : 5;
但是如果$ x以前不是null,那么PHP会做一个额外的做法($ x = $ x),此外,这一行比前一行更长。
简历:
$ x null:一次获得,一次比较,一次
$ x not null:两个get,一个比较,一个set($ x = $ x)。
然后我来到这里:
$x = $x ?: 5;
我们的操作比前一个少,我们只有一个字符少于第一个字符。
简历:
$ x null:一次获得,一次比较,一次
$ x not null:一次获取,一次比较,一次设置($ x = $ x)。
但我的问题是,当PHP必须这样做时:
$x = $x;
它真的在做吗?如果没有,第三种解决方案(最后一种)是最好的。否则,第一个解决方案是最好的解决方案。
是否有其他解决方案可以解决这个问题?
谢谢。
答案 0 :(得分:0)
&#34;最好的&#34;解决方案始终是比较类型
if ($x)
这个if等同于
if ($x == true)
但与
不一样if ($x === true)
此:
if (!$x)
与
相同if ($x != true)
向您展示这背后的问题,试图缩短它:
$x = false;
if (!$x)
$x = 5;
false
和null
在(!$x)
中将两者都评为真。
如果你想确定,你不要缩短它。 最佳是严格比较:
$x = ($x !== null) ? $x : 5;
正如deceze所说,缩短代码可能会导致混淆。 $x
可能会有不同的值,当您不将其与所需内容进行严格比较时会导致意外行为。例子:
$x = '';
$x = null;
$x = false;
$x = 0;
$x = 1;
$x = new stdClass;
当你把所有这些都放到一个没有严格的比较(if ($x)
)的时候会发生什么?
充分利用:
if ($x === null)
if ($x !== false)
if ($x !== 0)
if ($x instanceof stdclass)