PHP内置函数被识别为未声明变量的警告问题求助
兄弟我太懂这种翻出多年前老代码踩坑的感觉了!先把问题给你点透:
你看到的警告说Undefined variable $error_reporting,这不是PHP把函数认成了变量,而是你的代码确实在引用一个没定义的变量$error_reporting——看你贴的代码片段第一行:
switch ($error_reporting){
这里用的是带美元符号的变量,不是不带美元符号的error_reporting()函数调用,这就是问题的根源!
接下来给你几个可行的修复方案,选哪个看你需求:
方案1:修正为调用函数
如果原代码的意图是根据当前的错误报告级别执行不同逻辑,那应该把变量改成函数调用——去掉美元符号,加上括号:switch (error_reporting()){ case 0: error_reporting(0); @ini_set("display_errors",0); break; // 其他case的代码... }这样就能拿到当前PHP的错误报告级别作为switch的判断值了。
方案2:手动定义缺失的变量
如果原代码本来就有一个用来控制错误级别的$error_reporting变量,只是后来的代码里被删掉或注释掉了,那你可以在switch语句之前手动定义这个变量,比如:// 根据你想要的错误级别设置,0是关闭所有错误报告,1是开启基础错误提示 $error_reporting = 0; switch ($error_reporting){ case 0: error_reporting(0); @ini_set("display_errors",0); break; // 其他case的代码... }额外小修复
你代码里的@ini_set("display_errors",0);里的"是HTML转义后的双引号,PHP里直接用普通双引号就行,建议改成@ini_set("display_errors", 0);,避免不必要的语法问题。
最后提个小建议:因为你用的是老代码,现在的PHP版本默认错误报告级别比以前高,这类未定义变量的警告会直接显示出来。如果你嫌麻烦只想快速让代码跑起来,也可以在整个脚本的最开头加一行error_reporting(0);屏蔽所有警告,但还是建议把变量的问题修好,避免后续出现其他奇怪的bug。
备注:内容来源于stack exchange,提问作者binary_glitch

