重新声明函数适用于旧服务器,但不适用于新服务器


Redeclare function works on old server but not new

我正在将一个PHP 5.2.x应用程序迁移到一个新的5.2.x服务器上。旧服务器实际上是多年前作为PHP 4.0服务器开始的,并随着时间的推移升级到了PHP 5.2。我们的一个模块有一个函数,如果这个模块被多次使用,就会被重新声明。我们可以很容易地解决这个问题,但我们对它的工作原理感到困惑。

在新服务器上,它将失败,并出现预期的:

Fatal error: Cannot redeclare function

问题是,在旧服务器上,它总是重新声明函数!这里是否使用了PHP设置或特殊用法,使其在一台服务器上工作,而在另一台服务器却不能工作?

谢谢!

编辑仍在努力阐明这是如何实现的。站点FATAL错误,但在该错误点之后执行。

重新定义函数被认为是一个错误。

也许你们可以使用"重命名功能"。

http://es.php.net/manual/en/function.rename-function.php

if(function_exist("foo")){
  rename_function('foo', 'old_foo' );
  function foo(){
        /*...*/
  }
}

另一个想法是重写代码来完成

$foo = function(){  /* something */....  };

因此,下次您想要重新定义$foo()时,您可以执行

$foo = function(){  /* something else */....  };

我无法重现您的描述,PHP 4不允许您重新声明函数:

echo PHP_VERSION;
function foo() {}
function foo() {}

演示/输出:

4.4.9
致命错误:无法重新声明foo()(之前在/homepages/26/d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138

你必须在这里混合,所以最好在调试时更多地了解事实,而不是猜测(是的,我知道有时可能很难,但在调试时事实会有所帮助,要有针对性)。

如果这是一个致命的错误,脚本就会结束。您可以添加一个关闭回调函数来进一步调试您的问题,请参阅相关问题:

  • PHP:自定义错误处理程序-处理解析&致命错误