当我试图定义一个已经定义的函数时,我能让PHP抛出一个错误吗?

当我试图定义一个已经定义的函数时,我能让PHP抛出一个错误吗?,php,Php,我周期性地遇到这个问题,我试图弄清楚这是配置问题还是PHP的特性 基本上,在我的代码中的某个地方会定义一个函数foo(),然后在其他地方我会意外地使用相同的名称foo()再次定义一个函数。我希望抛出某种错误,例如“致命错误:函数已经定义好了,第234行,bar.php等等” 但我什么也得不到。我只是得到一个空白屏幕。调试可能需要很长时间,因为我试图准确地指出函数被意外重新定义的位置,而没有错误消息的帮助 我报告错误的配置设置设置为E_ALL,我可以顺利地看到所有其他类型的错误 有什么见解吗?我可

我周期性地遇到这个问题,我试图弄清楚这是配置问题还是PHP的特性

基本上,在我的代码中的某个地方会定义一个函数foo(),然后在其他地方我会意外地使用相同的名称foo()再次定义一个函数。我希望抛出某种错误,例如“致命错误:函数已经定义好了,第234行,bar.php等等”

但我什么也得不到。我只是得到一个空白屏幕。调试可能需要很长时间,因为我试图准确地指出函数被意外重新定义的位置,而没有错误消息的帮助

我报告错误的配置设置设置为E_ALL,我可以顺利地看到所有其他类型的错误

有什么见解吗?我可以做些什么来让PHP报告这些错误(这样我就可以重命名有问题的函数,或者将其包装在if function_exists()子句中)


编辑:要清楚,我了解在PHP中避免名称空间冲突的许多策略。我所说的例子是,无论出于何种原因,我意外地将一个函数命名为一个在开发过程中已经存在的名称(例如,我导入了一个已经定义了函数的文件)。出现这种情况时,我希望会收到一条错误消息,这将有助于我进行调试,但我没有收到错误消息。

您可以将函数定义包装到一个有条件的
函数中。\u exists()

对我有用

您可以包装一个
函数\u exists
检查每个函数,如果它已经存在,则让它抛出一条错误消息。然而,更好的方法是找出为什么致命错误不会出现在屏幕上。您能否检查
phpinfo()
以了解错误报告和相关设置

这是您在尝试重新定义函数时应该得到的结果:

Fatal error: Cannot redeclare file_get_contents() in D:\xyz\htdocs\test.php on line 5
从my
phpinfo()

显示错误打开

错误报告22519(等于……嗯,我不知道,但它显示错误:)


在一些完全关闭错误报告的托管环境中,我发现定义自定义错误处理程序非常有用:

是否在本地服务器上托管脚本?我知道一家英国的托管公司可以阻止任何PHP错误被返回,即使你已经设置了
E_all


如果是这种情况,请考虑在本地使用错误报告打开应用程序。

< P>作为替代,您可以通过使用.< /P>实际检查函数是否已经存在。
一些让你的生活更轻松的建议:

我通常会创建一个通用函数文件,在其中存储我将在整个应用程序中使用的所有全局函数


我也会尽量保持面向对象。如果您正在创建一个已经存在的对象,PHP将给出错误,通过将函数封装到逻辑对象中,您可以更轻松地维护它。

如果您没有正确组织代码,请尝试使用包含在文件中的公共库,并在其中定义函数。也许您只需要启动uses类,这样当您有两个同名函数时就不会发生冲突。

谢谢,是的,我知道函数_exists()。我说的是一个函数的意外命名,以及在这种情况下调试的困难。那么你最好的办法就是确保你的错误报告工作正常。尝试重新定义函数将触发致命错误以及输出。在一些完全关闭错误报告的托管环境中,我发现定义一个自定义错误处理程序非常有用:非常好,只要知道应该看到什么,这将是一个巨大的帮助。我怀疑是某种配置问题。我会深入挖掘,看看我发现了什么。好了,开始吧。我使用的是Wordpress,Wordpress似乎为“生产”模式定义了一些自定义的错误处理,可以很容易地重写。我检查你的答案,因为你的编辑帮助我更深入地挖掘问题所在。非常感谢!不客气,WP有这样的错误处理程序是很好的。也谢谢你!我已经在本地(在我的Mac上)和远程(在我工作时使用的Linux开发服务器上)进行了测试。每一个都有相同的行为(mac上的PHP5.3.0,linux上的PHP5.2.8)。
Fatal error: Cannot redeclare file_get_contents() in D:\xyz\htdocs\test.php on line 5
if (function_exists('foo'))
{
  echo 'foo function exists !!';
}
else
{
  echo 'foo function does not exists !!';
}