我可以使用逻辑OR || 在PHP变量声明?

ada*_*ort 0 php logical-operators

此代码有效:

$foo = getFoo();
if (!$foo) $foo = getBar();
if (!$foo) $foo = getJiggy();
if (!$foo) $foo = getWithIt();
Run Code Online (Sandbox Code Playgroud)

我以为我用逻辑运算符看到了它的简化:

$foo = (getFoo() || getBar() || getJiggy() || ...);
Run Code Online (Sandbox Code Playgroud)

我想,第一个真正的语句会获得通过,但相反,它只是设置$ FOO为boolean true,而不是返回值getFoo(),getBar()等等.

有没有像我想的那样简化?

zzz*_*Bov 5

对于JavaScript,foo = bar || baz;是一种常用的表达式,因为||运算符具有合并行为.

对于||运算符,PHP没有这种行为,它返回一个布尔值.因此,您最初发布的代码越详细:

$foo = getFoo();
if (!$foo) $foo = getBar();
if (!$foo) $foo = getJiggy();
if (!$foo) $foo = getWithIt();
Run Code Online (Sandbox Code Playgroud)

是您最可读,最好的选择.

PHP 5.3有一个三元运算符的简写版本,它作为一个合并运算符:

从PHP 5.3开始,可以省略三元运算符的中间部分.表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3.

这将允许您使用:

$foo = getFoo() ?: getBar() ?: getJiggy() ?: getWithIt();
Run Code Online (Sandbox Code Playgroud)

但是,假设您不必担心兼容性.