我知道,這已經出現了無數次,但預期的解決方案 -! 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 個其他包含之一,但是當您對其進行單元測試時,僅包含此文件。這是一個如此簡單和基本的事情,有什么方法可以確定是否聲明了全局函數?
使用函數存在并需要一次 - 仍然致命錯誤:先前聲明
慕田峪9158850
2022-07-29 16:17:18