news 2026/6/10 9:15:53

PHP Warning 与 Notice 大全:最容易踩的 20 个坑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP Warning 与 Notice 大全:最容易踩的 20 个坑

“代码明明能跑,怎么满屏 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。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 15:15:14

基于VUE的题库管理系统[VUE]-计算机毕业设计源码+LW文档

摘要:随着教育信息化的不断发展,题库管理系统在教育领域中发挥着日益重要的作用。本文旨在设计并实现一个基于VUE框架的题库管理系统,以提高题目管理的效率和准确性,为教学和考试提供有力支持。文章详细阐述了系统的需求分析、技术…

作者头像 李华
网站建设 2026/6/10 7:56:30

排序(包含插入,交换,快速,基数,桶排序)

排序确实要总结一下,因为下面写完就忘了上面的一些排序是什么了了,最好就是先写一个简单的描述,用来快速回顾。考研之前的知识点类似,进过三次变换之后排序变成什么样。请问符合什么排序。所以我们要知道这些排序的特点默认都是从…

作者头像 李华
网站建设 2026/6/10 8:59:41

软件行业全产业链全景深度研究报告

软件行业全产业链全景深度研究报告摘要:本报告围绕软件行业全产业链展开全景式研究,界定了软件行业全产业链的核心范畴与构成逻辑,系统剖析了上游基础支撑环节(硬件基础设施、基础软件、开源生态)、中游核心产品与服务…

作者头像 李华
网站建设 2026/6/10 8:54:50

普通专、本科学不了网络安全?最有效的自学方法我替你找到了

目录 前言自学网安第一阶段:打牢基础 学习这些基础知识有什么用呢? 第二阶段:化整为零 学习建议 第三阶段:实战演练 实践技巧 第四阶段:找准定位 深入学习建议:学习要避开的弯路 前言 “网络安全只有计…

作者头像 李华
网站建设 2026/6/10 8:56:39

Wi-Fi CERTIFIED Agile Multiband™ 技术概述

引言 Wi-Fi CERTIFIED Agile Multiband™是 Wi-Fi Alliance 的一项认证计划,其目的是使 Wi-Fi 网络资源能够得到更好的利用。Wi-Fi Agile Multiband™设备支持动态交换有关网络环境的信息,支持以智能化方式将客户端设备引导到推荐的接入点(AP)、频段或频道,还支持在同一 …

作者头像 李华
网站建设 2026/6/10 8:59:01

三种安装Jupyter Notebook的方法

本文详细介绍几种安装Jupyter Notebook的方法: 方法一:使用pip安装(推荐) 1. 安装Python 首先确保已安装Python(建议Python 3.7) 2. 安装Jupyter pip install notebook3. 运行Jupyter jupyter notebo…

作者头像 李华