Come è noto, in PHP effettuare la dichiarazione di una funzione associandola ad un nome di funzione già esistente ha come esito una notifica di errore sul modello della seguente:
Fatal error: Cannot redeclare function...
Questo perché il linguaggio non permette (giustamente) la dichiarazione di due funzioni omonime in uno stesso file; ugualmente, non sarà possibile chiamare una funzione definita dall’utente nello stesso modo di una nativa messa a disposizione da PHP stesso.
Quando si verifica l’errore e come risolverlo
I casi più comuni in cui si verifica questo errore sono i seguenti:
- all’interno dello stesso file sono presenti due o più funzioni con lo stesso nome: in tal caso basterà fare una ricerca per risolvere il problema.
- lo script che genera l’errore include altri file, pertanto è probabile che in una delle inclusioni sia presente una funzione omonima: in tal caso controllare ogni file incluso nello script al fine di cercare la funzione con il medesimo nome.
- lo script include lo stesso file più di una volta: in tal caso può essere utile utilizzare funzioni come include_once() e require_once() al posto dei classici include() e require().
- è stata creata una funzione con un nome già utilizzato da una funzione nativa del PHP: in tal caso una ricerca su Google potrebbe chiarirci le idee circa la presenza di funzioni PHP aventi lo stesso nome della nostra funzione personalizzata.
Lavorare su applicativi complessi
Quando si deve lavorare su un’applicazione particolarmente complessa, per esempio per l’aggiunta di un modulo, non sempre si ha la possibilità di conoscere a priori tutte la funzioni già dichiarate, è quindi frequente che un codice come il seguente:
function nome_funzione() {
// ...
}
produca l’errore di cui parlavamo all’inizio del post. Per evitare questo, possiamo però utilizzare una funzione di controllo, denominata function_exists(), che potrà essere utilizzata in questo modo:
if(!function_exists('nome_funzione')) {
function nome_funzione() {
// ...
}
}
In questo modo sarà possibile verificare l’inesistenza di una funzione e, solo se questa condizione dovesse essere verificata, renderne effettiva la dichiarazione.
Questa tecnica è molto utilizzata, ad esempio, nello sviluppo di plugin di WordPress o altri CMS in cui non è possibile conoscere a priori il codice di ciascun plugin che potrebbe essere installato dagli utenti (con conseguente aggravamento del rischio di duplicare nomi di funzioni che potrebbero portare al Fatal error).