PHP首先指定非空值

pie*_*e6k 19 php variables

我有三个像这样的值:

$a = null
$b = 3;
$c = null
Run Code Online (Sandbox Code Playgroud)

(我永远不知道会是什么null:也许所有人,也许都不是.)

在所谓的延迟加载之后,我试图以这种方式分配第一个非null值:

$d = $a or $b or $c;
Run Code Online (Sandbox Code Playgroud)

(它类似于JavaScript方式var d = a || b;(如果没有,它将分配b).)

但在PHP中它似乎不起作用.

我做错了,或者最简单的方法是什么?

elc*_*nrs 39

您可以在PHP 5.3+中使用短三元运算符:

$d = $a ?: $b ?: $c;
Run Code Online (Sandbox Code Playgroud)

请注意,这确实类似于JS中的强制类型.


更新(PHP 7)

在PHP 7.0+中你会做(称为null coalescing- 更多信息):

$d = $a ?? $b ?? $c;
Run Code Online (Sandbox Code Playgroud)


Nic*_*ice 6

在 PHP 7 中,您可以使用“空合并”运算符:

$d = $a ?? $b ?? $c;
Run Code Online (Sandbox Code Playgroud)

正如问题所问,这将分配第一个非空值(如果没有,则为空)。

与其他一些答案不同,它不会被隐式类型转换所困扰,例如,

$b = 0; $c = 1;
$d = $a ?? $b ?? $c;
echo $d;
Run Code Online (Sandbox Code Playgroud)

将输出 0:它不会介意 $a 根本没有被设置,并且不会传递 $b 即使它类型转换为false.