PHP无法重新声明函数/调用未定义的函数



我在Wordpress 4.7.1上使用WooCommerce。以前,我运行的是4.7.0。当Wordpress自动升级到4.7.1时,我突然开始看到签出无法重定向到"谢谢"页面,UI显示发生了致命错误。

打开调试显示以下错误:

PHP致命错误:无法在…中重新声明get_cc()(以前在…/templates/emails/email-addresss.PHP:36中声明)/第36行上的templates/emails/email-addresses.php

我还确认,从未使用requirerequire_onceincludeinclude_once直接调用此文件。然而,它被称为wc_get_template()

快速搜索一下,我想到了这个类似的问题。所以我在email-addresses.php中添加了以下内容:

if (!function_exists('get_cc')) {
function get_cc( $code ) {
... function body
}
}

在进行此更改后,我现在在调试日志中收到以下错误:

PHP致命错误:调用中未定义的函数get_cc()/第32行上的templates/emails/email-addresses.php

这意味着,无论出于何种原因,PHP都认为函数get_cc已经存在,但同时它是未定义的。

我不是最初的开发者。我从一个没有空的承包商那里接管了这个项目。很明显,这个文件在原来的基础上进行了大量修改。我确信函数返回的值必须保留,所以我不能只是注释掉调用。

鉴于以上信息,我有什么选择来解决或修复此问题

事实证明,与PHP中的标准函数定义不同,封装在if (!function_exists('function_name')) { ... }块中的函数定义必须在对该函数的任何调用之前

在这种情况下,函数定义(第36行)跟在调用(第32行)之后。这导致该函数在PHP中显示为未定义:

// Not working!
$value = get_cc($code);
if (!function_exists('get_cc')) {
function get_cc( $code ) {
... 
}
}

切换顺序,使函数定义优先修复了问题:

// Working!
if (!function_exists('get_cc')) {
function get_cc( $code ) {
... 
}
}
$value = get_cc($code);

到目前为止,PHP的文档没有提到这个问题。

最新更新