首页 > 解决方案 > 关于 PHP 中的 elvis 运算符的困惑

问题描述

我经常使用 elvis 运算符来设置默认值。例如,我有一个数组$x = ['value' => $value];,然后在我的代码的另一部分,$val = $x['value'] ?: '22';

在上面的场景中,如果$value是 3,$val 也应该是 3,但是如果$value是 undefined 或 0 什么的,它应该是 22。

当我在php playground上运行这种代码时,即使 $x 本身没有被定义,或者$x没有'value'属性,或者$value没有定义,它也会输出 22。

但是,当我在我的 Laravel 服务器上运行相同的代码时,行为是不同的。如果$x已定义,并且$x['value']被定义为虚假的,那么 evlis 运算符将按预期工作。但是如果$x没有定义,或者$x['value']没有设置,我会得到一个错误。例如,如果$x已定义但$x['value']未定义,我会收到“未定义索引”错误。以下是一些具体示例,以及两种环境中发生的情况

    $x = ['value' => 0];
    $val = $x['value'] ?: '22';
    // this works on both my laravel server and the playground appropriately

    $x = [];
    $val = $x['value'] ?: '22'; 
    // on Laravel, this errors, but on the playground it sets val to 22

    unset($x);
    $val = $x['value'] ?: '22'; 
    // on Laravel, this errors, but on the playground it sets val to 22

所以我对 elvis 运算符以及它如何处理未定义的值和未设置的索引有点困惑。大多数时候,我实际上更希望它以游乐场的行为方式运行——将未定义的值视为“虚假”并默认为运算符的右侧。但我不确定预期的行为到底是什么。

标签: php

解决方案


推荐阅读