PHP首先指定非空值

时间:2013-07-05 07:11:14

标签: php variables

我有三个这样的值:

$a = null
$b = 3;
$c = null

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

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

$d = $a or $b or $c;

(类似于JavaScript方式var d = a || b;(如果没有,则会指定b)。)

但是在PHP中它似乎不起作用。

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

6 个答案:

答案 0 :(得分:37)

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

$d = $a ?: $b ?: $c;

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


更新(PHP 7)

在PHP 7.0+中你会这样做(称为null coalescing - more informations):

$d = $a ?? $b ?? $c;

答案 1 :(得分:3)

试试这个......

$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

答案 2 :(得分:2)

在PHP 7中,您可以使用“Null coalescing”运算符:

$d = $a ?? $b ?? $c;

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

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

$b = 0; $c = 1;
$d = $a ?? $b ?? $c;
echo $d;

将输出0:它不会介意$ a根本没有设置,即使它输出到false也不会超过$ b。

答案 3 :(得分:1)

如果您可以将变量放在数组中,这可以提供帮助:

$d = current(array_filter(array($a, $b, $c)));

或者这也可以是一个apporach:

if(!empty($a)) {
 $d = $a;

} 

此检查可能会包含所有变量,例如$b$c

答案 4 :(得分:1)

在php中你可以这样做: -

`<?php
 $a = 1;
 $b = null;
 $c = null;
 $d = $a ? $a:($b?$b:($c?$c:'null'));
echo $d;
?>`

答案 5 :(得分:0)

您可以尝试:

$d = !is_null($a) ? $a : (!is_null($b) ? $b : $c);