首页 > 解决方案 > PHP中数组上的未定义索引是否有“自动空”运算符?

问题描述

我一直发现我正在编写很多这样的代码:

$customData1 = $user['custom_data_1'] ?? null;
$customData2 = $user['custom_data_2'] ?? null;
$customData3 = $user['custom_data_3'] ?? null;

似乎应该有某种更简单的语法。

我希望它能够正常工作:

$customData1 = $user['custom_data_1'];

如果索引没有定义,那就是这样$customData1null但这会出现 PHP 错误。有没有类似的东西:

$customData1 = $user['custom_data_1']?;

我理解??当回退不那么不寻常但null很常见时使用,我不明白为什么这个运算符没有默认值。

我知道我也可以这样做:

$user = (object) $user;
$customData1 = $user->custom_data_1;
$customData2 = $user->custom_data_2;
$customData3 = $user->custom_data_3;

但这超出了我实际上试图寻找答案的范围。

标签: php

解决方案


如果您仍然愿意考虑涉及对象,而不是您提到的对象,您可以实现预定义的接口ArrayAccess。就像是:

class stdArray implements ArrayAccess
{
    private $container = [];

    public function __const(array $array = [])
    {
        $this->container = $array;
    }

    ...

    public function offsetGet($offset)
    {
        return $this->container[$offset] ?? null;
    }

    ...

    // So we don't have to instantiate a new Object for each array if we don't need to.
    // Just me mindful though :P
    public function replace(array $array)
    {
        return $this->container = $array;
    }
}

例如:

$arr = new stdArray($user);
$customData1 = $user['custom_data_1'];
$customData2 = $user['custom_data_2'];
$customData3 = $user['custom_data_3'];
$arr = new stdArray();
foreach ($multiArray as $subArray) {
    $arr->replace($subArray);
    $customData1 = $arr['custom_data_1'];
    $customData2 = $arr['custom_data_2'];
    $customData3 = $arr['custom_data_3'];

    // Do some operations ...
}

还没有实际测试过,但这可能/应该有效。


推荐阅读