2009-09-05 24 views
24

tiendo a errores tales como:PHP: ¿cómo evitar redeclarar funciones?

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

¿Cómo puedo evitar el error? ¿Es posible crear una cláusula IF para verificar si una función se declara antes de declararla?

Respuesta

27

Uso require_onceinclude_once o en oposición a include o require si se incluyen los archivos que contienen sus funciones.

Los _once hermanos de include y require obligará a PHP para comprobar si el archivo ya ha sido incluido/requerido, y si es así, no include/require de nuevo, evitando de ese modo 'no puede redeclare función x ... 'errores fatales.

+0

¡Esto salva vidas! –

+1

@ karim79: Te deseo lo mejor en tu vida. –

+3

Aunque la respuesta de karim79 puede solucionar el problema de la operación, en realidad no responde al problema. Creo que la respuesta de Dooltaz lo hace correctamente. –

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

http://us.php.net/function_exists

+1

Esto puede ser útil para polyfills, es decir, cuando desea agregar una función a una versión anterior de php que se introdujo en las versiones más recientes de php. En ese caso, 'require_once' no puede evitar la colisión. – CodesInChaos

+0

Tenga en cuenta que este código debe ** agregarse ** antes del ** uso ** de la función – MujtabaFR

7

"function_exists" le dirá si una función ya ha sido declarada. Aunque sospecho que tal vez tengas problemas para incluir archivos más de una vez. Cuando incluye un archivo, ¿está utilizando require_once o include_once o simplemente require/include?

+0

Técnicamente, eso no es completamente correcto. Una función de PHP podría no existir, pero aún así _declared_. p.ej. 'function_exists' devolverá' false' para cualquier función definida en 'disable_functions' de la configuración de PHP. Sin embargo, esas funciones todavía están _declaradas_. – fritzmg

4

Si se trata de clases method_exists() podría ser lo que estás buscando:

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

    } 
} 

Esto comprobará la clase actual para hacer que la función function_name no existe antes de intentar declarar

Cuestiones relacionadas