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

时间:2017-01-23 19:43:19

标签: php wordpress woocommerce

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

打开调试后发现以下错误:

  

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

我还确认,永远不会使用requirerequire_onceincludeinclude_once直接调用此文件。但是,使用wc_get_template()调用它。

快速搜索让我this similar question。所以我将以下内容添加到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已经存在,但同时它是未定义的。

我不是原始开发者。我从一个没有的承包商手中接管了这个项目。很明显,这个文件已经从原始文件中进行了大量修改。我确信函数返回的值必须保留,所以我不能只是注释掉这个调用。

根据上述信息,我有哪些方法可以解决或解决此问题?

1 个答案:

答案 0 :(得分:2)

事实证明,与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的文档没有提到这个问题。