在 PHP 7.4 中报错:Illegal offset type in isset or empty

1、在 PHP 7.4 中报错:Illegal offset type in isset or empty。如图1

图1

{
  "errors": [
    {
      "debugMessage": "Illegal offset type in isset or empty",
      "message": "Internal server error",
      "extensions": {
        "category": "internal"
      },
      "locations": [
        {
          "line": 3,
          "column": 5
        }
      ],
      "path": [
        "onlineStore",
        "theme"
      ],
      "trace": []
    }
  ],
  "data": {
    "onlineStore": {
      "theme": null,
      "__typename": "OnlineStore"
    },
    "__typename": "Query"
  }
}

2、代码如下:

if (isset($setting['settingId']) && isset($currentSettings[$setting['settingId']])) {
 $setting = $setting + [
   'value' => $currentSettings[$setting['settingId']],
  ];
}

3、打印 $setting,其值为对象。如图2

图2

Array
(
    [info] => 轮播图标题、模块标题、商品的标题等
    [label] => 
    [type] => HEADER
    [default] => 
    [content] => 标题
    [id] => Modules\OnlineStoreThemeGraphQL\Resolver\Id Object
        (
            [prefixes:protected] => Array
                (
                    [0] => 96b1c8b9-5b18-4760-9e26-50ab009ac011
                    [1] => settings
                    [2] => 0
                )

        )

    [__typename] => ThemeSettingHeader
    [settingId] => Modules\OnlineStoreThemeGraphQL\Resolver\Id Object
        (
            [prefixes:protected] => Array
                (
                    [0] => 96b1c8b9-5b18-4760-9e26-50ab009ac011
                    [1] => settings
                    [2] => 0
                )

        )

)

4、将 $setting[‘settingId’] 转为 字符串。

$settingId = isset($setting['settingId']) ? (string) $setting['settingId'] : null;

// 获取当前设置值
if (isset($settingId) && isset($currentSettings[$settingId])) {
 $setting = $setting + [
   'value' => $currentSettings[$setting['settingId']],
  ];
}

5、打印转换后的字符串值如下

96b1c8b9-5b18-4760-9e26-50ab009ac011/settings/0

6、不再报错。

永夜