【问题标题】:Fallthrough variable assignment in PHP? [duplicate]PHP中的失败变量赋值? [复制]
【发布时间】:2012-06-19 01:22:45
【问题描述】:

可能重复:
Coalesce function for PHP?

我不确定这通常被称为什么,但我希望标题能够很好地传达信息。我所拥有的是一些变量,其中一些可能为空。

我想做:

$a = $b || $c || $d;

其中 $a 最终成为第一个非空变量的 =。

【问题讨论】:

标签: php


【解决方案1】:

据我所知,PHP 不像 JavaScript 那样支持这一点。

你也可以这样做:

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

更通用的解决方案:

function fallthrough($arr) {
    //$arr should be an array of possible values. The first non-null value is returned
    do $a = array_shift($arr);
    while($a === null && $arr);
    return $a;
}

【讨论】:

  • 那么,在 PHP 中执行此操作的最佳方法是什么?显然我不能只嵌套三元运算符,因为这样会因为更多的变量而变得疯狂。我只是有一个很大的 if elseif 块吗?
  • 小心 - 如果 $b"0",它将失败。更准确地说,它会落在任何虚假值上。如果你真的只需要null 就可以通过,你需要显式测试。
  • 你可以做的是定义一个函数。我会用解决方案编辑我的答案。
【解决方案2】:
<?php
$a = 0;
$b = false;
$c = true; //should become this
$d = '1';
$e =  $a ?: $b ?: $c ?: $d;
var_dump($e);
//bool(true)

//should be '1' if order is different
$e =  $a ?: $b ?: $d ?: $c;
var_dump($e);
//string(1) "1"

...但是?: 有点新,你会混淆你的同事/其他编码人员。

【讨论】:

  • 哦,如前所述:在所有虚假值上都失败,而不仅仅是 NULL。
【解决方案3】:

我认为这是不可能的。我认为您必须使用其他更费力的方法。 IE。创建一个变量数组,遍历它,直到找到一个非空值并中断循环,如下所示:

$vars = array("b" => $b, "c" => $c, "d" => $d);

foreach($vars as $var) {
   if($var != null) {
      $a = $var;
      break;
   }
}

好吧,就像这里的一些其他答案所说,您可以使用速记方式来编写这个,但是编写可读的代码也很重要。上面的代码可读性很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多