我会定期遇到这个问题,我正在试图弄清楚它是配置问题还是PHP的特性。
基本上,我的代码中会有一个函数foo()定义,然后在其他地方我会不小心用同名foo()定义一个函数。我希望会抛出某种错误,例如“致命错误:功能已定义第234行,bar.php等等。”
但我一无所获。我只是得到一个空白的屏幕。调试可能会花费一些时间,因为我试图准确地确定函数被意外重新定义的位置,而无需错误消息的帮助。
我报告错误的配置设置被设置为E_ALL,我看到了所有其他类型的错误。
任何见解?我可以做些什么来导致PHP报告这些错误(这样我可以重命名有问题的函数或将其包装在if function_exists()子句中)?
编辑:为了清楚起见,我理解了避免PHP中命名空间冲突的许多策略。我说的是无论出于何种原因,我意外将函数命名为开发过程中已存在的名称(或者例如我导入已定义函数的文件)的实例。我希望在发生这种情况时会出现错误消息,这有助于我调试,但我没有得到。
答案 0 :(得分:4)
您可以将函数定义包装在条件function_exists()
:
if (!function_exists("file_get_contents"))
{
function file_get_contents(....)
....
}
适合我。
您可以对每个函数进行function_exists
检查,如果已经存在,则会抛出错误消息。然而,更好的方法是找出为什么致命错误不会出现在屏幕上。您可以查看phpinfo()
的error_reporting和相关设置吗?
这是您在尝试重新定义函数时应该得到的:
Fatal error: Cannot redeclare file_get_contents() in D:\xyz\htdocs\test.php on line 5
来自我的phpinfo()
:
display_errors 开启
error_reporting 22519(等于......好吧,我不知道,但它显示错误:)
在某些托管环境中完全关闭错误报告时,我发现定义自定义错误处理程序非常有用:set_error_handler()
答案 1 :(得分:1)
您是否在本地服务器上托管脚本?我知道一家英国托管公司,即使您已设置E_ALL
,也可以防止任何PHP错误被退回。
如果是这种情况,请考虑在本地测试应用并启用错误报告。
答案 2 :(得分:0)
作为替代方案,您可以使用function_exists实际检查功能是否已存在。
if (function_exists('foo'))
{
echo 'foo function exists !!';
}
else
{
echo 'foo function does not exists !!';
}
答案 3 :(得分:0)
一些让您的生活更轻松的建议:
我通常会创建一个通用函数文件,在那里我存储我将在整个应用程序中使用的所有全局函数。
我也会尝试尽可能保持面向对象。如果您正在创建一个已存在的对象,PHP将会出错,并且通过将您的函数封装到逻辑对象中,您可以更轻松地维护它。
答案 4 :(得分:0)
您似乎没有正确组织代码,尝试使用文件中包含的公共库,并在那里定义函数。也许您只需要启动使用类,当您有两个具有相同名称的函数时,就不会发生冲突。