“代码明明能跑,怎么满屏 Warning / Notice?”
“是不是我 PHP 学得不行?”
“这些报错不管行不行?”
说句大实话:
👉90% 的 PHP 新手,都是被 Warning 和 Notice 搞到怀疑人生的。
而且最气的是:
- 不报 Fatal Error
- 页面还能打开
- 但日志刷屏、接口异常、header 报错连环炸
这篇文章,我就用人话,帮你一次性把PHP Warning / Notice 最容易踩的 20 个坑讲清楚。
一、先搞清楚:Warning / Notice 到底是啥?
很多新手第一反应是:
“是不是报 Warning 就是大问题?”
其实不是。
PHP 报错严重程度顺序(从轻到重)
1️⃣Notice(提醒你写得不规范)
2️⃣Warning(可能有问题,但还能跑)
3️⃣Fatal Error(直接崩)
⚠️ 但注意一句话:
Warning / Notice 本身不致命,但“连锁反应”很致命。
二、Notice 类:新手 10 个必踩坑
1️⃣ Undefined variable(用之前没定义)
echo $name;❌ 常见场景:
- 表单没提交
- if 没走进去
- 函数外变量没传进来
✅ 正确写法:
$name = $name ?? ''; echo $name;2️⃣ Undefined index(数组键不存在)
echo $_POST['email'];❌ 用户没填就炸
✅ 正确写法:
$email = $_POST['email'] ?? '';3️⃣ Undefined offset(数组下标越界)
$arr = []; echo $arr[0];✅ 解决思路:
用之前先判断:
if (isset($arr[0])) { echo $arr[0]; }4️⃣ Trying to access array offset on value of type null
$data = null; echo $data['id'];📌 本质:
你以为它是数组,其实是 null
5️⃣ Use of undefined constant
echo test;PHP 会当成字符串前先 Notice 一下
✅ 正确写法:
echo 'test';6️⃣ Only variables should be passed by reference
reset(explode(',', $str));📌 这是老坑,新手 100% 会遇到
7️⃣ Array to string conversion
echo $arr;📌 PHP:你想让我怎么输出?
8️⃣ Object of class could not be converted to string
和上面一个道理,只是对象版本
9️⃣ Notice 被 header 报错“连坐”
很多人忽略:
👉Notice 输出 = 页面已经有内容
后面再 setcookie / header,直接炸。
🔟 开发环境没开 error_reporting
不开调试,新手永远不知道自己错在哪。
三、Warning 类:更危险的 10 个坑
11️⃣ Cannot modify header information
🔥PHP 最经典报错之一
原因总结一句话:
👉header 之前,有任何输出
包括:
- BOM
- echo
- Notice
- 多余空行
12️⃣ fopen / file_get_contents 失败
file_get_contents($url);❌ 常见原因:
- 路径错
- 权限不够
- 远程文件被禁
13️⃣ include / require failed
include 'config.php';📌 路径问题占 80%
14️⃣ Division by zero
$avg = $sum / $count;$count = 0 的时候直接 Warning
15️⃣ Invalid argument supplied for foreach
foreach ($data as $v) {}$data 其实是 null / false
16️⃣ mysqli_fetch_assoc expects parameter 1 to be mysqli_result
📌 SQL 执行失败,但你还在 fetch
17️⃣ count(): Parameter must be an array or Countable
PHP 7+ 高频坑
18️⃣ curl_exec(): SSL certificate problem
📌 curl + https + 证书
19️⃣ Cannot use a scalar value as an array
$a = 1; $a['x'] = 2;20️⃣ Deprecated 准 Warning 级别(升级 PHP 后)
老项目升级 PHP,直接满屏。
四、新手必须记住的 3 条生存法则
✅ 1. 所有变量,用之前先判断
$var = $var ?? '';✅ 2. 所有数组访问,用 isset / ??
$value = $arr['key'] ?? null;✅ 3. 开发环境显示错误,生产环境记录日志
error_reporting(E_ALL); ini_set('display_errors', 1);上线一定关显示!
五、这些 Warning / Notice 能不能不管?
能跑 ≠ 没问题
你现在不管,后面一定会遇到:
- header 失效
- 接口返回异常
- JSON 输出被污染
- 前端解析失败
👉很多“诡异 BUG”,根源就是一个 Notice。