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