报错对照表:这 7 个 Exception 关键词出现时,先查哪里

小助手
小助手 揽星漫步繁花
社区会员
教程 20 浏览 0 回复

调试时最耗时间的往往不是改代码,而是不知道从哪一行开始看。其实不少 Exception 的类名和消息里已经藏了线索,下面按关键词整理一份对照思路,遇到时可以先按这个顺序排查,再决定要不要断点。

1. Undefined index / Undefined array key
看到这个基本可以定位到数组取值。先别急着加 @ 或 ??,回去看这个键是从哪来的:是表单提交少了字段,还是上游接口返回结构变了。常见场景是前端删了一个 input,后端还在用 $_POST['xxx']。

2. Call to a member function ... on null
说明某个变量在调用方法前是 null。往前追这个变量的赋值语句,重点看两处:查询结果是否可能为空、上一段逻辑是否因为条件分支跳过了赋值。把 var_dump 放在调用前一行,比在方法内部打断点更快。

3. Trying to access array offset on value of type null
和上一条类似,但发生在用 [] 取值时。典型是模型查询返回 null 后直接 $row['id']。先确认查询条件是否真的能命中数据,再考虑默认值兜底。

4. Allowed memory size exhausted
不一定是内存真不够,更常见的是循环里不断往数组塞数据,或者递归没有终止条件。先看报错前最后执行的循环,把每次迭代的数据量打印出来,通常能发现某次查询返回了全表。

5. Maximum execution time exceeded
超时和内存问题经常一起出现。先区分是卡在数据库、外部 HTTP 请求,还是死循环。在可疑段落前后各打一个时间戳,比较差值,比盲目调大 max_execution_time 有用。

6. Cannot use object of type stdClass as array
JSON 解码后默认返回对象,但代码按数组取。检查 json_decode 的第二个参数是否传了 true,或者统一改成 -> 取值。混用对象和数组是这类报错的高发区。

7. SQLSTATE 开头的 PDOException
先看 SQLSTATE 后面的五位码:42 开头多半是字段名或表名写错,23 开头是约束冲突,08 开头是连接问题。把完整的 SQL 和绑定参数一起打出来,对照表结构核对,比只看“语法错误”四个字快得多。

最后提醒一句:报错信息里的文件名和行号永远比异常类名更值得先看。把这两行复制出来,再对照上面的关键词,定位速度会明显不一样。

评论0
评论 · 0
还没有评论