PHP中的默认设置


default affectation in PHP

编辑:我的错,我犯了一个错误,当我在这篇文章中说null时,我的意思是说null或空或零或假或任何使(!$x)为真

为空时,我们试图找到影响变量值的最佳方法。我们想这样做:

if (!$x)
    $x = 5;

我的朋友建议用一行字解决:

!$x && $x = 5;

这里,如果$x为空,那么$x = 5将被PHP解释为$x将包含5。如果$x不为空,则不会读取该行的第二部分,并且$x将保持其旧值。

简历:
$x null:一个get,一个比较,一个集合。
$x not null:一次get,一次比较

我试着做得更干净更好。首先,我来到了这个:

$x = $x ? $x : 5;

但是这里如果$x之前不是空的,那么PHP会做一个额外的修饰($x = $x),另外,这一行比前一行长。简历:
$x null:一个get,一个比较,一个集合。
$x not null:两个get,一个比较,一个集合($x = $x)

然后我来到这个:

$x = $x ?: 5;

操作比前一个少,比第一个少一个字符。简历:
$x null:一个get,一个比较,一个集合。
$x not null:一个get,一个比较,一个集合($x = $x)。

但我的问题是,当PHP必须这样做:

$x = $x;

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

有其他方法可以解决这个问题吗?

谢谢。

"最佳"解决方案始终是比较类型

if ($x)

等于

if ($x == true)

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

:

if (!$x)

相同
if ($x != true)

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

$x = false;
if (!$x)
    $x = 5;

falsenull(!$x)中均为真。

当你想要确定的时候,你不会缩短它。最好的是严格比较:

$x = ($x !== null) ? $x : 5;

正如dec已经说过的,缩短代码可能导致混淆。$x可能具有不同的值,当您不严格地将其与期望的内容进行比较时,会导致意外的行为。例子:

$x = '';
$x = null;
$x = false;
$x = 0;
$x = 1;
$x = new stdClass;

如果没有严格比较(if ($x)),将所有这些放入if中会发生什么?

充分利用:

if ($x === null)
if ($x !== false)
if ($x !== 0)
if ($x instanceof stdclass)