You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.4.2升级到8.1.2后出现Attempt to assign property "status" on null报错求助

PHP 8.1 赋值对象属性报错的原因与修复方案

问题关联的PHP 8特性变更

这个错误完全和PHP 8的特性变更有关:PHP 8.0及以上版本禁止给null值动态赋值对象属性。在PHP 7及更早版本中,如果变量未初始化(值为null),尝试给它赋值对象属性时,PHP会自动隐式创建一个stdClass实例;但PHP 8.0起,这个隐式行为被移除,直接抛出Attempt to assign property on null的致命错误。

你的代码中,循环内的$myObj没有提前初始化,第一次进入循环时$myObj是null,PHP 8.1会直接报错。

代码修复方案

只需要在循环内部、给属性赋值前,显式初始化$myObj为stdClass对象即可:

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $myObj = new stdClass(); // 显式初始化对象
    $myObj->status = '1';
    $myObj->video = $row["token"];
    $title = str_replace(".mp4","",$row["filename"]);
    $myObj->title = $title;
    // 这里可添加后续逻辑,比如将$myObj存入数组或输出等
  }
}

如果你的需求是将多个对象收集到数组中,还需要提前初始化目标数组:

$videoList = []; // 初始化存储对象的数组
if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $myObj = new stdClass();
    $myObj->status = '1';
    $myObj->video = $row["token"];
    $title = str_replace(".mp4","",$row["filename"]);
    $myObj->title = $title;
    $videoList[] = $myObj; // 将对象加入数组
  }
}

补充说明

PHP 8的这个变更属于类型严格性增强的一部分,目的是避免隐式创建对象带来的意外逻辑问题,让代码的行为更清晰可控,符合现代编程语言的类型规范。

内容的提问来源于stack exchange,提问作者Paul Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:06:31