8

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

if ($var = $foo)

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

我也可以分配$var$fooif $fooistrue但 if $fooisfalse做其他事情吗?像:

if ($var = !$foo) {
    if ($var = !$bar) {
        //Etc...
    }
}

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

4

4 回答 4

11

@chandresh_cool 的建议是正确的,但要允许多种可能性/回退,您必须嵌套三元表达式:

$var = ($foo == true) ? $foo: 
       ($bar == true) ? $bar: 
       ($fuzz == true) ? $fuzz:
       $default;

注意:前 3 行以冒号而不是分号结尾。

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

$var = ($foo||$bar||$fuzz...);
于 2013-05-16T09:12:11.997 回答
5

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

$var = $foo ?: $bar ?: "default";

在这种情况下 when$foo是一个伪造的值(如 false、空字符串等),它将回退到$barelse 使用$foo. 如果 bar 是一个伪造的值,它将回退到 string default

请记住,这适用于伪造的值,而不仅仅是true.

例子:

$foo = "";
$bar = null;
$var = $foo ?: $bar ?: "default";  

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

[更新]

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

例子:

$array = [];
$bar = null;
$var = $array['foo'] ?? $bar ?? "default";

在 php 7 之前,这会发出Undefined index: foo通知。但是对于空合并运算符,该通知不会出现。

于 2016-08-19T08:04:57.453 回答
4

相反,您可以像这样使用三元运算符

$var = ($foo == true)?$foo:"put here what you want";
于 2013-05-16T07:16:08.590 回答
3

您可以像这样分配值:

$var = $foo;

也可以在 if 语句中设置它们,PHP 将评估您刚刚分配的结果 $var。

我真的不明白你的问题,但你可以这样做:

if(!($var = $foo)){
   //something else.
}
于 2013-05-16T07:26:07.560 回答