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/10 13:53:05

【读点论文】Depth Anything V2数据范式革新+模型蒸馏优化+评估基准升级,好的合成数据优于标注不佳真实数据,依旧Dinov2+DPT解码器,优化改变了损失设计和数据增强

Depth Anything V2 Abstract 这项工作介绍了Depth Anything V2。在不追求花哨技术的情况下,我们的目标是揭示关键发现,为构建强大的单目深度估计模型铺平道路。值得注意的是,与V1 相比,该版本通过三个关键实践产生更精细&#x…

作者头像 李华
网站建设 2026/6/10 9:03:12

从ToDetect看浏览器指纹检测平台的优劣与选择技巧

随着网络安全和隐私保护意识的提升,越来越多的企业和个人开始关注浏览器指纹检测。浏览器指纹是一种无需Cookies就能识别用户身份的技术,通过浏览器的配置、插件、字体、屏幕分辨率等信息生成一个相对唯一的标识。 对于企业来说,准确的浏览器…

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

RLVE:通过自适应可验证环境扩展语言模型的强化学习

RLVE:通过自适应可验证环境扩展语言模型的强化学习一段话总结全文 这篇论文《RLVE: Scaling Up Reinforcement Learning for Language Models with Adaptive Verifiable Environments》提出了一种创新的RL框架,针对语言模型(LM)强…

作者头像 李华
网站建设 2026/6/10 15:37:02

断言那些事儿:单测只需要一个断言?

一个测试用例,而不是一个测试断言。 断言轮盘并不意味着多重断言就是坏事。当我指导团队或单个开发人员进行测试驱动开发(TDD)或单元测试时,经常会遇到一种特别的观念: 多个断言是不好的。一个测试必须只有一个断言。…

作者头像 李华
网站建设 2026/6/10 2:44:27

Harbor 镜像仓库核心技术详解(适配 K8S 1.33)

作为 10 年经验的运维专家,我全程用 “人话” 拆解 Harbor 的漏洞扫描、签名验证、冷热镜像管理 ——放弃 Helm,纯 Docker Compose 部署,适配 K8S 1.33,每个环节都给 “能直接复制的操作步骤 生产级案例”,不绕理论&a…

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

WPS VBA插件7.1完整安装与使用指南:解锁办公自动化新境界

WPS VBA插件7.1完整安装与使用指南:解锁办公自动化新境界 【免费下载链接】最新版VBA插件7.1支持WPS 本仓库提供最新版VBA插件7.1的下载资源,该插件专为WPS设计,能够帮助用户在WPS中高效使用VBA功能 项目地址: https://gitcode.com/open-so…

作者头像 李华