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

PHP无法重新声明函数/调用未定义的函数,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我正在WoodPress 4.7.1上使用WooCommerce。以前,我运行的是4.7.0。当Wordpress自动升级到4.7.1时,我突然发现签出无法重定向到“谢谢”页面,UI显示发生了致命错误 打开调试显示以下错误: PHP致命错误:无法在第36行的…/templates/emails/email-addresses.PHP中重新声明get_cc()(以前在…/templates/emails/email-addresses.PHP:36中声明) 我还确认,此文件从未使用require、

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

打开调试显示以下错误:

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

我还确认,此文件从未使用
require
require\u once
include
include\u once
直接调用。但是,它是用
wc\u get\u template()
调用的

一次快速的搜索使我想到了。因此,我在email-addresses.php中添加了以下内容:

if (!function_exists('get_cc')) {
    function get_cc( $code ) {
        ... function body
    }
}
进行此更改后,我现在在调试日志中收到以下错误:

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

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

我不是最初的开发者。我从一个不在的承包商那里接管了这个项目。显然,这个文件是从原始文件中大量修改而来的。我确信函数返回的值必须保留,因此我不能只注释掉调用


鉴于上述信息,我有什么办法来解决或解决这个问题呢?

事实证明,与PHP中的标准函数定义不同,如果(!function\u exists('function\u 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文档没有提到这个问题。

函数定义在该语句中,但是整个语句实际上都在函数调用之后(第36行是定义的开始,调用在第32行)。