我有一些像这样的三个值:
$a = null
$b = 3;
$c = null
(我永远不知道会是什么null
:也许全部,也许没有。)
在所谓的延迟加载之后,我尝试以这种方式分配第一个非空值:
$d = $a or $b or $c;
(类似于 JavaScript 方式var d = a || b;
(如果没有 a 则分配 b)。)
但在 PHP 中它似乎不起作用。
我做错了吗,或者什么是最好和最简单的方法?
您可以在 PHP 5.3+ 中使用短三元运算符:
$d = $a ?: $b ?: $c;
请注意,这确实像在 JS 中一样类型强制。
更新(PHP 7)
在 PHP 7.0+ 中,您会这样做(称为null coalescing
-更多信息):
$d = $a ?? $b ?? $c;
试试这个...
$d = array_filter(array($a, $b, $c))[0]; //newer PHP only
或这个:
$d = current(array_filter(array($a, $b, $c))); //warning about references
或这个:
$tmp = array_filter(array($a, $b, $c));
$d = current($tmp); //most safe
在 PHP 7 中,您可以使用“Null coalescing”运算符:
$d = $a ?? $b ?? $c;
正如问题所要求的那样,这将分配第一个非空值(如果没有,则为空值)。
与其他一些答案不同,它不会被隐式类型转换绊倒,例如,
$b = 0; $c = 1;
$d = $a ?? $b ?? $c;
echo $d;
将输出 0:它不会介意 $a 根本没有被设置并且不会超过 $b 即使它类型转换为false
.
如果您可以将变量放入数组中,这会有所帮助:
$d = current(array_filter(array($a, $b, $c)));
或者这也可以是一个方法:
if(!empty($a)) {
$d = $a;
}
此检查可能会针对所有变量继续进行,例如$b
和$c
在php中你可以这样做: -
`<?php
$a = 1;
$b = null;
$c = null;
$d = $a ? $a:($b?$b:($c?$c:'null'));
echo $d;
?>`
您可以尝试:
$d = !is_null($a) ? $a : (!is_null($b) ? $b : $c);