PHP 8 错误 - 尝试在 null 上分配属性“code”

PHP 8 error - Attempt to assign property "code" on null

提问人:Samuel Omopariola 提问时间:11/9/2023 最后编辑:Samuel Omopariola 更新时间:11/10/2023 访问量:82

问:

法典:

foreach($groups as $items): 
  if(isset($items->item)||count($items->item) > 0){ 
       $return = $this->formgroup($items->item);
       //$return is throwing error - - Attempt to assign property "code" on null
  }
endforeach;

当我尝试获取对象的属性时,PHP 7 中的一切都运行良好 - . 现在它返回错误$items->item

尝试在 null 上分配属性“code”。

我试图将对象转换为 ,但到目前为止没有成功。new stdClass()

当我记录对象时,它似乎是一个,并且检查或检查属性也不起作用。$itemsobject(stdClass)issetis_null$items->item

下面是对象的结构var_dump($items)

  public 'reason' => string 'Notice' (length=6)
  public 'text' => string 'Details' (length=7)
  public 'item' => 
    array (size=22)
      0 => 
        object(stdClass)[3413]
          public 'reason' => string 'Fname' (length=5)
          public 'code' => 
            array (size=1)
              ...
          public 'text' => string 'F name' (length=6)
          public 'type' => string 'string' (length=6)
          
      1 => 
        object(stdClass)[3415]
          public 'reason' => string 'Mname' (length=5)
          public 'code' => 
            array (size=1)
              ...
          public 'text' => string 'M name' (length=6)
          public 'type' => string 'string' (length=6)
       
      2 => 
        object(stdClass)[3417]
          public 'reason' => string 'Lname' (length=5)
          public 'code' => 
            array (size=1)
              ...
          public 'text' => string 'L name' (length=6)
          public 'type' => string 'string' (length=6)
          
      3 => 
        object(stdClass)[3419]
          public 'reason' => string 'Nationality' (length=11)
          public 'code' => 
            array (size=1)
              ...
          public 'text' => string 'Nationality' (length=11)
          public 'type' => string 'string' (length=6)
          

有关如何检查属性上的空值的任何帮助将不胜感激。'code'

溶液:PHP 8 实现了一个严格的类型脚本,这意味着每个变量都不能更改为其他类型,因此通过创建一个新的类型转换变量来存储数据,然后进行验证,从而解决了问题。

  $arr = (array)$items->item[0]->code;
  if ($arr) {
    $return = $this->formgroup($items->item);
  }
PHP 对象 stdclass php-8.1

评论

4赞 Marcin Orlowski 11/9/2023
发布相关代码,而不是对象转储
1赞 ZeNix 11/9/2023
最好查看代码,检查您如何迭代项目,而不是查看@MarcinOrlowski所说的转储。
1赞 Diego D 11/9/2023
从问题发生的位置来看,问题来自,并且您正在尝试在持有值的变量上分配这样的属性formgroup()codenull
0赞 RiggsFolly 11/9/2023
也许一个垃圾场可以解释这一点,因为这就是来源$groups$items
0赞 Diego D 11/9/2023
我最疯狂的猜测是,在推送项目之前,这样的数组可能是空的。您应该首先将其初始化为空数组。但不知道为什么它发生在 php8 而不是 php7 中

答: 暂无答案