Anche se la versione 5 ha portato un grosso supporto per la programmazione ad oggetti (che tratteremo brevemente anche nei paragrafi successivi) le funzioni rimangono comunque la parte fondamentale del linguaggio dato che PHP è nato come linguaggio procedurale, e tutt'oggi molti sviluppatori continuano a seguire questa filosofia di programmazione.
Una funzione è un insieme di istruzioni che hanno lo scopo (la funzione, appunto) di eseguire determinate operazioni. La praticità delle funzioni sta nel fatto che ci consentono di non dover riscrivere tutto il codice ogni volta che abbiamo la necessità di eseguire quelle operazioni comuni: ci basta infatti richiamare l'apposita funzione, fornendole i parametri, cioè i dati/informazioni, di cui ha bisogno per la sua esecuzione.
Le funzioni possono essere incorporate nel linguaggio oppure essere definite dall'utente. In entrambi i casi, il modo di richiamarle è lo stesso.
La sintassi fondamentale con la quale si richiama una funzione è molto semplice:
nome_funzione();
Si tratta semplicemente di indicare il nome della funzione, seguito da parentesi tonde. Queste parentesi devono contenere i parametri da passare alla funzione, ma vanno obbligatoriamente indicate anche se non ci sono parametri, nel qual caso rimangono vuote come nell'esempio che abbiamo visto sopra. Nel caso poi in cui la funzione restituisca un valore, possiamo indicare la variabile in cui immagazzinarlo:
$valore = nome_funzione();
In questo modo, la variabile $valore
riceverà il risultato della funzione. Le funzioni possono essere utilizzate anche all'interno di espressioni: in tal caso il valore restituito verrà utilizzato durante la valutazione dell'espressione:
$prova = (10 * numero_anni()) - numero_casuale();
Abbiamo detto che le funzioni possono essere incorporate nel linguaggio oppure definite dall'utente: in questa lezione passeremo in rassegna alcune fra le funzioni incorporate maggiormente utilizzate in PHP, tenendo però presente che tali funzioni sono numerosissime, rivolte agli scopi più disparati, e che quindi non ne avremo che una visione molto parziale. Consiglio la consultazione del manuale online per una trattazione più completa delle funzionalità e dei casi particolari.
Cominciamo dalle principali funzioni che operano sulle variabili in generale:
empty(valore)
- verifica se la variabile che le passiamo è vuota oppure no. Per 'vuota' si intende che la variabile può contenere una stringa vuota o un valore numerico pari a 0, ma può anche essere non definita o essere impostata al valore NULL (l'eventuale indicazione di una variabile non definita, in questo caso, non genera errore notice). Restituisce un valore booleano (vero o falso).
isset(valore)
- verifica se la variabile è definita. Una variabile risulta non definita quando non è stata inizializzata o è stata impostata col valore
NULL
. Restituisce un valore booleano. is_null(valore)
- verifica se la variabile equivale a
NULL
, ma genera un errore 'notice' se viene eseguito su una variabile non definita. Restituisce un valore booleano. is_int(valore), is_integer(valore), is_long(valore)
- verifica se la variabile è di tipo intero. Le tre funzioni sono equivalenti. Restituiscono un valore booleano.
is_float(valore), is_double(valore), is_real(valore)
- verifica se la variabile è di tipo numerico double (o float). Le tre funzioni sono equivalenti. Restituiscono un valore booleano.
is_string(valore)
- verifica se la variabile è una stringa. Restituisce un valore booleano.
is_array(valore)
- verifica se la variabile è un array. Restituisce un valore booleano.
is_numeric(valore)
- verifica se la variabile contiene un valore numerico. È molto importante la distinzione fra questa funzione e
is_int()
ois_float()
, perchè queste ultime, nel caso di una stringa che contiene valori numerici, restituiscono falso, mentreis_numeric()
restituisce vero. Restituisce un valore booleano. gettype(valore)
- verifica quale tipo di dato le abbiamo passato. Restituisce una stringa che rappresenta il tipo di dato, ad esempio:
boolean
,integer
,double
,string
,array
. È bene però, in uno script, non fare affidamento su questi valori per dedurre il tipo di dato, perchè in versioni future di PHP alcune di queste stringhe potrebbero essere modificate. Meglio usare le funzioni viste prima. print_r(valore)
- stampa (direttamente sul browser) informazioni relative al contenuto della variabile che le abbiamo passato. È utile in fase di debug, quando a seguito di comportamenti 'strani' del nostro script vogliamo verificare il contenuto di certi dati. Se il valore passato è un array, la funzione ne evidenzia le chiavi ed i valori relativi. Restituisce un valore booleano.
unset(valore)
- distrugge la variabile specificata. In realtà non si tratta di una funzione, ma di un costrutto del linguaggio, e ne abbiamo già parlato nella lez. 8. Dopo l'
unset()
, l'esecuzione diempty()
ois_null()
sulla stessa variabile restituirà vero, mentreisset()
restituirà falso. Non restituisce valori.
Vediamo ora qualche esempio per chiarire l'utilizzo di queste funzioni:
$b = empty($a); // $a non è ancora definita, quindi $b sarà vero $a = 5; $b = isset($a); // vero $b = is_float($a); // falso: $a è un intero $b = is_string($a); // falso $a = '5'; $b = is_int($a); // falso: $a ora è una stringa $b = is_string($a); // vero $b = is_numeric($a); // vero: la stringa ha un contenuto numerico $c = gettype($b); // $c prende il valore 'boolean' unset($a); // eliminiamo la variabile $a; $b = is_null($a); // vero, ma genera errore
In questi esempi abbiamo sempre assegnato alla variabile $b
i valori booleani restituiti dalle funzioni. Nella pratica, è più frequente che tali valori non siano memorizzati in variabili, ma che vengano usati direttamente come condizioni, ad esempio per delle istruzioni di tipo if
. Ancora un paio di esempi:
if (empty($a)) { print ('$a è vuota o non definita!'); } else { print ('$a contiene un valore'); } if (is_numeric($a)){ print ('$a contiene un valore numerico'); } else { print ('$a non contiene un numero'); }