PHP 中访问空值数组下标错误的解决方案

PHP 中访问空值数组下标错误的解决方案

当使用 `->first()` 查询数据库未返回结果时,变量为 `null`,直接用 `$var[“key”]` 会触发“trying to access array offset on value of type null”错误;需先判空再取值。

该错误本质上是 PHP 7.4+ 引入的严格类型安全机制所致:null 值不支持数组式访问(如 $null[“key”]),而 Eloquent 的 first() 在无匹配记录时返回 null,而非空模型或空集合。

在你的代码中:

$evaluationjob = evaluation_elements_jobs::where('job_id', $user->job_id)
    ->where('company_id', $company_check->id)
    ->first();

$items = json_decode($evaluationjob["element_degree"]); // ❌ 危险!若 $evaluationjob 为 null,此处直接报错

正确做法是分步校验

  1. 确保查询结果存在($evaluationjob !== null);
  2. 确保目标字段存在且非 null(推荐用 isset() 或 array_key_exists());
  3. 再执行 json_decode()。

✅ 推荐写法(健壮、清晰、符合 Laravel 最佳实践):

Playground AI

Playground AI

AI图片生成和修图

下载

立即学习PHP免费学习笔记(深入)”;

$evaluationjob = evaluation_elements_jobs::where('job_id', $user->job_id)
    ->where('company_id', $company_check->id)
    ->first();

if ($evaluationjob && isset($evaluationjob->element_degree)) {
    $items = json_decode($evaluationjob->element_degree, true); // 第二个参数 true → 返回关联数组,更易处理
} else {
    $items = []; // 或 throw new InvalidArgumentException('Evaluation job or element_degree missing');
}

⚠️ 注意事项:

  • 使用 $evaluationjob->element_degree(对象属性访问)比 $evaluationjob[“element_degree”](数组访问)更符合 Eloquent 模型规范;
  • 若 element_degree 字段可能为 null 或空字符串,建议进一步校验:!empty($evaluationjob->element_degree);
  • 开发阶段可启用 strict_types=1 并配合 PHPStan/PHP_CodeSniffer 提前捕获此类问题;
  • 生产环境应记录缺失数据日志(如 Log::warning(‘Missing evaluation job’, […])),便于排查业务逻辑异常。

总结:永远不要假设数据库查询必然返回结果。将「判空 → 取值 → 解析」拆解为显式步骤,是编写健壮 PHP/Laravel 代码的基本功。

https://www.php.cn/faq/2007464.html

发表回复

Your email address will not be published. Required fields are marked *