2009-09-05 25 views
24

Io tendo ad ottenere errori come:PHP: come evitare le funzioni di reindirizzamento?

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

come posso evitare l'errore? È possibile creare una clausola IF per verificare se una funzione è stata dichiarata prima di dichiararla?

risposta

27

Utilizzare require_once o include_once in contrasto con include o require quando si includono i file che contengono le funzioni.

I _once fratelli di include e require costringerà PHP per verificare se il file è stato già incluso/richiesto, e in caso affermativo, non include/require di nuovo, impedendo così 'non può ridichiarare funzione x ... "errori fatali.

+0

Questo salva vite! –

+1

@ karim79: Ti auguro il meglio della tua vita. –

+3

Sebbene la risposta di karim79 possa risolvere il problema dell'op, in realtà non risponde al problema. Penso che la risposta di Dooltaz lo faccia correttamente. –

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

http://us.php.net/function_exists

+1

Questo può essere utile per polyfill, cioè quando si desidera aggiungere una funzione a una versione precedente di php che è stata introdotta nelle versioni più recenti di php. In questo caso 'require_once' non può evitare la collisione. – CodesInChaos

+0

Si prega di notare che questo codice dovrebbe essere ** aggiunto ** prima dell' ** utilizzo ** della funzione – MujtabaFR

7

"function_exists" vi dirà se una funzione è già stato dichiarato. Anche se ho il sospetto che forse hai un problema con l'inclusione dei file più di una volta. Quando includi un file stai usando require_once o include_once o solo require/include?

+0

Tecnicamente non è completamente corretto. Una funzione PHP potrebbe non esistere, ma ancora _declared_. per esempio. 'function_exists' restituirà' false' per qualsiasi funzione definita in 'disable_functions' della configurazione di PHP. Tuttavia, tali funzioni sono ancora _declared_. – fritzmg

4

Se avete a che fare con classi method_exists() potrebbe essere quello che stai cercando:

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

    } 
} 

Questo controllerà della classe corrente per far sì che la funzione function_name non esiste prima di tentare di dichiararla

Problemi correlati