【问题标题】:Does PHP sometimes ignore function redeclarations?PHP 有时会忽略函数重新声明吗?
【发布时间】:2012-04-21 19:47:31
【问题描述】:

我和几个朋友在一个网站上工作,最近,用户抱怨一个相当重要的功能除了返回一个空白页面之外什么也没做。这只发生在某些用户身上,而其他用户可以完美地使用它。

我查阅了调试输出,结果发现一个函数被声明了两次。一次在功能的主页 (foo.php) 和一个在获得 require_once'ed 的文件中。显然,我现在正走在修复它的正确道路上,但让我感到困惑的是,很多人在访问该页面时没有遇到这个问题。两个函数声明是相同的;身体似乎已从一个文件复制+粘贴到另一个文件。这些函数声明都不是有条件的;它们都应该总是发生。

是否有人知道 PHP 能够处理我的错误并使页面正常工作的情况,尽管有这个致命错误?

【问题讨论】:

  • 首先使用require_once 修复所有问题,根据访问的页面,可能存在页面包含特定文件一次或多次的情况。
  • 如帖子中所说,我已经在使用require_once了。
  • PHP 不允许多次声明函数(具有相同的范围)。有些访问者可能会有不同的想法,不会大喊大叫。
  • 可能值得研究一下这些用户的不同之处。它只发生在这些人身上是有原因的。例如,他们可能是管理员,并且仅在此人具有相关访问权限时才包含脚本等。
  • 我自己测试过,开发者。使用我自己的帐户,它工作正常。使用测试帐户时,它会显示一个空白页面。

标签: php compiler-errors redeclare redeclaration


【解决方案1】:

它可能是您的函数声明的类型是公共的、私有的或受保护的,因此您可能不会碰巧遇到致命错误,因为据我所知,php 不允许以任何方式重新声明函数。

【讨论】:

    【解决方案2】:

    抱歉,PHP 永远不能忽略致命错误或函数重新声明,因为在这种情况下,PHP 会混淆要考虑哪些函数声明,是使用旧声明还是新声明。

    • Fatal Error 的意思是,有些地方出了问题,PHP 对下一步该做什么感到困惑,因此你的工作就是把它做好。

    • 抱歉,PHP 不会试图找出两个或多个声明是否相同,然后忽略其中一个。如果必须这样做,已经很慢的 PHP 将变得更慢。因此,为了社区的利益,您应该考虑编写正确的代码,而不是让 PHP 解释器为您更正。

    【讨论】:

    • 我知道这一点,我并不是要让 PHP 解决我的问题,正如您在原始帖子中看到的那样。 PHP is 目前在某些情况下会忽略这个致命错误,我正试图了解它为什么会这样。
    • 您可以通过详细调试和检查错误日志轻松了解这一点。它的编程和任何东西都可以在编程中编程!如果它的空白,意味着它是一个错误,如果你还没有为php错误启用错误登录文件,你应该考虑这样做。
    • @Neko:不,它没有忽略它。它不能。这是另一回事。
    • @linuxeasy:我确实在我们网站的开发部分启用了错误日志;这就是我发现函数被重新声明的方式。对于普通用户,不会显示错误,这会导致页面为空。
    • 我也遇到了这种情况。 PHP 遇到第二个声明,内部将其视为错误,但不执行任何其他操作。不是真的无视,也不是抱怨。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多