PHP中访问空值数组偏移量的错误解决方案

12次阅读

PHP中访问空值数组偏移量的错误解决方案

当使用$evaluationjob[“element_degree”]访问数据库查询结果时,若$evaluationjob为NULL(即未查到记录),php 7.4+会抛出“trying to access Array offset on value of type null”错误;需先判空再取值。

该错误源于 php 严格类型检查机制的增强:从 PHP 7.4 开始,对 null 值执行数组下标访问(如 $var[‘key’])将直接触发致命错误,而非静默返回 null 或警告。

在您的代码中:

$evaluationjob = evaluation_elements_jobs::where('job_id', $user->job_id)     ->where('company_id', $company_check->id)     ->first(); // 可能返回 null(无匹配记录)  $items = json_decode($evaluationjob["element_degree"]); // ❌ 危险!若 $evaluationjob === null,则报错

->first() 方法在未找到记录时返回 null,此时 $evaluationjob[“element_degree”] 等价于 null[“element_degree”],违反语言规范。

✅ 正确做法是双重防护

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

  1. 确保 $evaluationjob 非空(非 null);
  2. 确保其确实包含 element_degree 字段(避免字段缺失或为 null)。

推荐写法(兼顾健壮性与可读性):

$evaluationjob = evaluation_elements_jobs::where('job_id', $user->job_id)     ->where('company_id', $company_check->id)     ->first();  if ($evaluationjob && isset($evaluationjob->element_degree) && is_string($evaluationjob->element_degree)) {     $items = json_decode($evaluationjob->element_degree, true); // true → 返回关联数组,更安全 } else {     $items = []; // 或 throw new InvalidArgumentException('Missing or invalid element_degree'); }

⚠️ 注意事项:

  • 使用对象属性访问($evaluationjob->element_degree)比数组下标($evaluationjob[“element_degree”])更符合 Eloquent 模型惯例;
  • json_decode() 应配合 is_string() 校验,防止传入 null 或非字符串导致返回 null 而不报错;
  • 若需默认值,可结合 Null Coalescing operator(PHP 7.0+):
    $jsonStr = $evaluationjob?->element_degree ?? ''; $items = is_string($jsonStr) ? json_decode($jsonStr, true) : [];

总结:始终假设数据库查询可能失败,在访问模型属性或 JSON 字段前进行显式判空与类型校验,是编写健壮 PHP 应用的基本原则。

text=ZqhQzanResources