Come abbiamo visto nel paragrafo precedente, per chiamare una funzione basta scrivere il suo nome all’interno del codice e questa verrà eseguita. PHP ci permette però di usare alcune “finezze” che in altri linguaggi non è possibile usare.
Avete mai avuto la necessità di poter chiamare una funzione di cui non sapete nemmeno il nome? Questo in PHP è realizzabile con poche linee di codice.

Una chiamata di funzione indiretta è, per quanto il nome possa spaventare, una cosa veramente semplice. Basterà inserire all’interno di una variabile qualsiasi il nome della funzione da chiamare e usare la variabile come se fosse una vera e propria funzione aggiungendo la coppia di parentesi tonde subito dopo il nome.

<?php
 
/* funzione banale che crea la media */
 
function fai_media ( $a , $b )
{
  return (float)($a + $b) / 2;
}
 
/* ora assegniamo il nome della funzione alla variabile */
 
$media = "fai_media";
 
/* ed ecco che richiamiamo la funzione tramite la variabile */
 
echo "la media tra 2 e 19 è: ". $media (2, 9);
 
?>

Per chi volesse approfondire questo argomento volevo solo aggiungere alcune piccole informazioni. PHP ci mette a disposizione alcune funzioni da usare con questa tecnica che ci permettono di sapere a priori se la funzione che andremo a chiamare esiste o meno in modo da evitare chiamate a funzioni inesistenti.

La funzione si chiama function_exists, accetta come unico parametro il nome della funzione da controllare e ritorna vero solo se questa esiste.

Inoltre nelle ultime versioni si è andato persino oltre permettendo la creazione di funzioni all’interno del codice. Grazie alla funzione create_function è possibile creare delle funzioni mentre il codice stesso è in esecuzione.

<?php
 
/* 5 funzioni */
 
function funzione1 () { echo "1"; }
function funzione2 () { echo "2"; }
 
function funzione3 () { echo "3"; }
function funzione5 () { echo "4"; }
 
function funzione6 () { echo "5"; }
 
for ($i=1; $i<7; $i++)
{
  /* il nome della funzione da chiamare è generato
     durante l'esecuzione */
 
  $funzione = "funzione$i";
 
  /* la funzione funzione$i con $i==4 non esiste */
  if (function_exists ($funzione)) $funzione ();
}
 
/* creiamo l'intera funzione dinamicamente */
$runtime = create_function ('$a', 'echo "il doppio di $a è", $a*2;');
$runtime(9);
 
?>

vicius