亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用函數存在并需要一次 - 仍然致命錯誤:先前聲明

使用函數存在并需要一次 - 仍然致命錯誤:先前聲明

PHP
慕田峪9158850 2022-07-29 16:17:18
我知道,這已經出現了無數次,但預期的解決方案 -! function_exists()并且require_once()- 不起作用。問題是(我已經做了很多搜索)有沒有辦法在給定的執行點確定一個函數是否已聲明但不存在?把它打出來幾乎沒有意義,但這就是正在發生的事情。細節:這是我們所擁有的以及致命的地方:if (! function_exists('some_function')) {   require_once('file-containing-the-function.php');}Fatal error: cannot redeclare some_function, previously declared in file-containing-the-function.php on line XX . . . .您會認為function_exists()and require_once()(或 include_once,也嘗試過)的組合可以防止這個問題,但在這種環境中它不會。我發現的最有見地的花絮是在這條評論中:PHP 函數可能不存在,但仍被聲明。因此,我的問題似乎沒有一個好的答案(除了正確重建整個系統,這不會很快發生。)這是一個巨大的遺留系統,到處都有全局變量和函數。沒有命名空間,類也很少,有很多地方會出錯。我知道問題出在那個問題的某個地方 -file-containing-the-function.php包含在包含等的包含中,很多層很深(堆棧跟蹤甚至沒有顯示它。)。即便如此,根據 SO 上的所有描述、定義和大量響應,包裝器應該可以工作。在這段代碼中,它沒有出現在get_defined_functions(). 一切都是全局和頂級的,函數內部沒有函數或任何常見的嫌疑犯,比如被忽略的額外包含。require_once()也適用于file-containing-the-function.php包含的其他文件。get_included_files() 文件不顯示該文件file-containing-the-function.php甚至在此代碼執行時已包含在內。此代碼所在的文件是一個包含本身,并some_function()從其他地方的另一個包含繼承。我無法將此文件的包含或此代碼向上移動到調用堆棧足夠遠以確保首先執行它(如果我這樣做會破壞很多其他事情。)此代碼必須存在于它所在的位置,因為這個特定的文件可以包括但不包括file-containing-the-function.php. 例如,這可能是在實際使用中用于網頁輸出的 20 或 30 個其他包含之一,但是當您對其進行單元測試時,僅包含此文件。這是一個如此簡單和基本的事情,有什么方法可以確定是否聲明了全局函數?
查看完整描述

2 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

我不確定發生了什么,因為錯誤消息暗示該文件被多次需要,即使您使用了require_once. 和的_once版本的全部意義在于防止重新定義。requireinclude


與其將if語句放在 周圍require_once,不如將其放入file-containing-the-function.php,然后require_once無條件使用。


if (!function_exists('some_function')) {

    function some_function(...) {

        ...

    }

}


查看完整回答
反對 回復 2022-07-29
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

對于仍然有興趣知道的人,在您提到的 fritzmg 評論中,function_exists 仍然不會使您受益,因為您無法通過在錯誤情況下加載文件來再次聲明該函數。只需在您不需要的項目中使用"include_once"或任何地方。但如果你仍然得到錯誤,那是因為兩種情況中的任何一種。"require_once"function_exists

1 . 您在項目的多個文件中聲明了函數。

2 . 您正在使用的項目中的其他一些地方需要或包含兩次以包含相同的文件?;虬匆髨绦幸淮?,按包含執行一次。


查看完整回答
反對 回復 2022-07-29
  • 2 回答
  • 0 關注
  • 104 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號