2009-09-05 89 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不存在试图宣称它