PHP中的默认效果

时间:2014-07-30 13:47:09

标签: php operator-keyword ternary

编辑:我的错,我犯了一个错误,当我在这篇文章中说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;

它真的在做吗?如果没有,第三种解决方案(最后一种)是最好的。否则,第一个解决方案是最好的解决方案。

是否有其他解决方案可以解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

&#34;最好的&#34;解决方案始终是比较类型

if ($x)

这个if等同于

if ($x == true)

但与

不一样
if ($x === true)

此:

if (!$x)

相同
if ($x != true)

向您展示这背后的问题,试图缩短它:

$x = false;

if (!$x)
    $x = 5;

falsenull(!$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)