如果设置了变量,则分配

在PHP中,我发现自己经常编写这样的代码:

$a = isset($the->very->long->variable[$index])
            ? $the->very->long->variable[$index]
            : null;

有没有更简单的方法来做到这一点? 最好不要求我写$the->very->long->variable[$index]两次。


可悲的是,因为RFC已被拒绝。 由于isset不是函数,而是语言结构,所以不能为这种情况编写自己的函数。

注意:因为这是一种语言结构而不是函数,所以不能使用变量函数来调用它。


一个更新,因为PHP 7现在已经出来,并且在这一点上是一个改变游戏规则的游戏; 以前的答案是关于PHP 5。

PHP 7解决了这个问题。 因为你确实认为用PHP编写这个文件是很常见的,这绝对不是很优雅。

在PHP 7中有空集合运算符(RFC),它是isset三元条件的完美缩写。

其目标是取代这种情况:

$var = isset($dict['optional']) ? $dict['optional'] : 'fallback';

由此:

$var = $dict['optional'] ?? 'fallback';

更好的是,空合并操作符是可链接的:

$x = null;
# $y = null; (undefined)
$z = 'fallback';

# PHP 7
echo $x ?? $y ?? $z   #=> "fallback"

# PHP 5
echo isset($x) ? $x : (isset($y) ? $y : $z)

null coalesce操作符的行为与isset()完全相同:在以下情况下会采用主题变量的值:

  • 变量被定义(它存在)
  • 该变量不为null
  • 对于PHP初学者来说只是一个注释:如果你使用三元条件,但你知道主题变量是必须定义的(但你想要一个虚假值的后备),那么就有Elvis算子:

    $var = $dict['optional'] ?: 'fallback';
    

    对于Elvis运算符,如果$dict['optional']是无效偏移量或$dict未定义,您将收到E_NOTICE警告(PHP 5&7)。 这就是为什么在PHP 5中,人们使用可怕的isset? a:b表格,当他们不确定输入时。


    假设您知道$the->very->long->variable已设置,并且您只是担心数组索引....

    $x = $the->very->long->variable;
    $a = isset($x[$index]) ? $x[$index] : null;
    

    或者您可以在代码中使用更通用的变体:

    function array_valifset($arr,$k, $default=null) {
        return isset($arr[$k]) ? $arr[$k] : $default;
    }
    

    然后像这样对任何数组值进行调用:

    $a = array_valifset($the->very->long->variable,$index);
    
    链接地址: http://www.djcxy.com/p/57719.html

    上一篇: Assign if variable is set

    下一篇: Order of evaluation and @ sign in the PHP code segment?