我正在将PHP 5.2.x应用程序迁移到新的5.2.x服务器。多年前,旧服务器实际上是作为PHP 4.0服务器启动的,随着时间的推移升级到PHP 5.2。我们的一个模块有一个函数,如果多次使用该模块,则会重新声明。我们可以很容易地解决这个问题,但我们对它的运作方式感到困惑。
在新服务器上,它将失败并带有预期的结果:
Fatal error: Cannot redeclare function
问题是在旧服务器上它始终重新声明该功能!这里是否使用了PHP设置或特殊用法,使其在一台服务器上运行而在另一台服务器上运行?
谢谢!
编辑仍在努力寻找可行的方法。站点FATAL错误但在该错误点之后执行。
答案 0 :(得分:1)
重新定义函数会被视为错误。
也许你们可以使用“重命名功能”。
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 */.... };
答案 1 :(得分:0)
我无法重现您的描述,PHP 4不允许您重新声明功能:
echo PHP_VERSION;
function foo() {}
function foo() {}
演示/输出:
4.4.9
致命错误:无法重新声明foo()(之前在/homepages/26/d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138)中声明:eval()'d code:2)in / homepages / 26 /d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138):第3行的eval()代码
你必须在这里混合一些东西,所以在调试时更好地了解事实,而不是猜测(是的,我知道有时可能很难,但事实有助于调试,瞄准它们)。
如果这是一个致命的错误,你的脚本就会结束。您可以添加关闭回调函数以进一步调试您的问题,请参阅相关问题: