如果为true,则在条件内分配变量

Jar*_*red 7 php if-statement conditional-statements

我知道你可以在这样的条件下分配一个变量:

if ($var = $foo)

但是我不需要在条件本身做任何事情,所以我经常留下空括号.我可以简单地分配$varif $foo是否true以其他方式而不需要在以后做其他事情?

也可以我给你$var$foo,如果$footrue,但如果$foofalse做别的事情?喜欢:

if ($var = !$foo) {
    if ($var = !$bar) {
        //Etc...
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上我想要有更多的后备/默认值.

Rob*_*one 9

@ chandresh_cool的建议是正确的,但是为了允许多个可能性/后备,你必须嵌套三元表达式:

$var = ($foo == true) ? $foo: 
       ($bar == true) ? $bar: 
       ($fuzz == true) ? $fuzz:
       $default;
Run Code Online (Sandbox Code Playgroud)

注意:前3行以冒号结束,而不是分号.

但是,更简单的解决方案是执行以下操作:

$var = ($foo||$bar||$fuzz...);
Run Code Online (Sandbox Code Playgroud)


Ler*_*roy 5

虽然这是一个非常古老的职位。伪造值的后备逻辑可以这样编码。

$var = $foo ?: $bar ?: "default";
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当$foo是伪造的值(例如false,空字符串等)时,它将退回到$bar否则使用$foo。如果bar是伪造的值,它将回退到字符串default

请记住,这不仅适用于伪造的价值true

例:

$foo = "";
$bar = null;
$var = $foo ?: $bar ?: "default";  
Run Code Online (Sandbox Code Playgroud)

$var将包含文本,default因为空字符串并且null被视为“假”值。

[更新]

在php 7中,您可以使用新的null合并运算符:??,它还会检查isset()是否存在该变量。当您在数组中使用键时,这很有用。

例:

$array = [];
$bar = null;
$var = $array['foo'] ?? $bar ?? "default";
Run Code Online (Sandbox Code Playgroud)

在PHP 7之前,这会发出Undefined index: foo通知。但是使用null合并运算符时,该通知不会出现。