2009-09-05 25 views
24

我往往會得到錯誤,如:PHP:如何避免重新聲明函數?

Fatal error: Cannot redeclare get_raw_data_list() (previously declared in /var/www/codes/handlers/make_a_thread/get_raw_data_list.php:7) in /var/www/codes/handlers/make_a_thread/get_raw_data_list.php on line 19

我怎樣才能避免錯誤?是否有可能創建一個IF-子句來檢查函數是否在聲明之前被聲明?

回答

27

使用require_onceinclude_once而不是includerequire包含包含您的函數的文件時。檢查

_once兄弟姐妹includerequire將迫使PHP,如果該文件已被列入/必需的,如果是這樣,不include/require一遍,從而防止'不能重新聲明X功能...'致命錯誤。

+0

這可以挽救生命! – 2012-06-19 15:25:43

+1

@ karim79:祝你生活中最美好。 – 2012-09-10 20:51:35

+3

儘管karim79的答案可能會解決操作問題,但實際上並沒有解決問題。我認爲Dooltaz的回答是正確的。 – 2013-05-27 17:59:21

68
if(!function_exists("get_raw_data_list")) { 
... define function here ... 
} 

http://us.php.net/function_exists

+1

這對於polyfills很有用,例如當你想添加一個函數到在更新版本的php中引入的較老版本的php時。在這種情況下'require_once'不能避免碰撞。 – CodesInChaos 2015-03-18 08:34:05

+0

請注意,該代碼應在功能 – MujtabaFR 2016-09-26 19:53:01

7

function_exists」 會告訴你,如果一個函數已聲明。雖然我懷疑你可能會遇到多次包含文件的問題。當你使用require_once或者include_once或者只需要/ include?

+0

的**使用**之前添加**。從技術上講,這不完全正確。 PHP函數可能不存在,但仍然是_declared_。例如對於PHP配置的'disable_functions'中定義的任何函數,'function_exists'將返回'false'。但是,這些函數仍然是_declared_。 – fritzmg 2016-09-12 21:10:14

4

如果你正在處理類method_exists()可能是你在找什麼:

if(!method_exists(__CLASS__, 'function_name')){ 
    function function_name(){ 

    } 
} 

這會檢查當前類,使該功能function_name不存在試圖宣稱它