2017-01-23 106 views
1

我在Wordpress 4.7.1上使用WooCommerce。以前,我運行的是4.7.0。當WordPress的自動升級到4.7.1,我突然開始看到檢出失敗重定向到「謝謝」頁面,用戶界面顯示發生了致命的錯誤。PHP無法重新聲明函數/調用未定義的函數

打開調試揭示了以下錯誤:

PHP Fatal error: Cannot redeclare get_cc() (previously declared in .../templates/emails/email-addresses.php:36) in .../templates/emails/email-addresses.php on line 36

我還證實,該文件是從不直接調用requirerequire_onceincludeinclude_once。然而,它被稱爲wc_get_template()

快速搜索將我帶到this similar question。因此,我增加了以下電子郵件-addresses.php:

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

進行此更改後,我現在收到以下錯誤調試日誌:

PHP Fatal error: Call to undefined function get_cc() in .../templates/emails/email-addresses.php on line 32

這意味着,無論出於何種原因, PHP認爲函數get_cc已經存在,但同時它是未定義的。

我不是最初的開發者。我從一個不可用的承包商手中接管了項目。這似乎很清楚,這個文件是從原來的重大修改。我確信必須保留函數返回的值,所以我不能僅僅評論這個調用。

鑑於上述信息,我有哪些選擇可以解決此問題或解決此問題?

+0

函數定義在該語句中,但是整個語句實際上是在函數調用之後(第36行是定義開始的地方,而且調用在第32行)。 – vbnet3d

回答

1

事實證明,與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的文檔不提到這個問題。