Introduzione
Quando si lavora con le funzioni in PHP, uno degli aspetti più utili e pratici è la tipizzazione di parametri e valori di ritorno. In altre parole, possiamo dichiarare in modo esplicito quali tipi di dati una funzione accetta e quale tipo di dato restituisce.
Questo approccio rende il codice più chiaro, più facile da mantenere e soprattutto più sicuro. In un progetto reale, dove molte funzioni si chiamano tra loro, sapere in anticipo che una funzione riceve una stringa, un intero o un array aiuta a prevenire errori difficili da individuare.
La tipizzazione in PHP è diventata sempre più importante nelle versioni moderne del linguaggio. Oggi è una buona pratica usare i type hint sia per i parametri sia per il valore di ritorno, specialmente in applicazioni medio-grandi, API, librerie e progetti collaborativi.
In questo tutorial vedremo come usare i tipi nelle funzioni PHP con un esempio concreto: una piccola funzione che valida e normalizza i dati di un utente prima di salvarli o mostrarli a video.
Codice completo
<?php
declare(strict_types=1);
/**
* Normalizza il nome: rimuove spazi extra e mette la prima lettera maiuscola.
*/
function formattaNome(string $nome): string
{
$nome = trim($nome);
$nome = strtolower($nome);
return ucfirst($nome);
}
/**
* Valida l´età: deve essere un numero intero compreso tra 0 e 120.
*/
function validaEta(int $eta): bool
{
return $eta >= 0 && $eta <= 120;
}
/**
* Calcola un messaggio di benvenuto.
* Se l´età è valida, include anche un messaggio personalizzato.
*/
function creaMessaggioBenvenuto(string $nome, int $eta): string
{
$nomeFormattato = formattaNome($nome);
if (!validaEta($eta)) {
return "Età non valida per $nomeFormattato.";
}
return "Ciao $nomeFormattato, hai $eta anni e il tuo profilo è valido.";
}
// Esempio di utilizzo
$nomeInput = " maRCo ";
$etaInput = 28;
echo creaMessaggioBenvenuto($nomeInput, $etaInput);
Spiegazione
Nel codice precedente abbiamo usato la tipizzazione in tre funzioni diverse, ciascuna con un compito specifico.
1. declare(strict_types=1)
La riga declare(strict_types=1); attiva la modalità rigorosa per i tipi scalari. Questo significa che PHP non farà conversioni automatiche troppo permissive tra tipi diversi quando vengono passati argomenti alle funzioni.
Per esempio, senza questa impostazione, una stringa numerica potrebbe essere accettata come intero in alcuni contesti. Con strict types, invece, il comportamento è più prevedibile e riduce gli errori nascosti.
2. Tipi nei parametri
La funzione formattaNome(string $nome): string accetta solo una stringa e restituisce una stringa. Se provassimo a passarle un numero intero o un array, PHP genererebbe un errore di tipo.
Questo è molto utile perché il contratto della funzione è chiaro: chi la usa sa esattamente cosa deve fornire.
3. Tipi di ritorno
La funzione validaEta(int $eta): bool restituisce sempre un valore booleano. Questo rende la logica più leggibile: chi chiama la funzione sa che riceverà solo true o false.
Usare il tipo di ritorno è una forma di documentazione integrata. Non serve aprire commenti o file esterni per capire cosa produce la funzione.
4. Composizione di funzioni tipizzate
La funzione creaMessaggioBenvenuto(string $nome, int $eta): string combina le altre due funzioni. Prima formatta il nome, poi verifica l’età e infine costruisce un messaggio.
Questo è un esempio molto comune nello sviluppo reale: funzioni piccole, ben definite e riutilizzabili che collaborano tra loro. La tipizzazione aiuta a mantenere ogni pezzo coerente.
5. Vantaggi pratici
- Riduzione degli errori: meno problemi dovuti a dati passati nel formato sbagliato.
- Codice più leggibile: la firma della funzione spiega già cosa fa.
- Manutenzione più semplice: modificare o estendere il codice è meno rischioso.
- Supporto migliore dagli strumenti: editor e IDE possono offrire autocompletamento e analisi più precise.
- Contratti chiari: ogni funzione dichiara in modo esplicito le proprie aspettative.
Best practice
La tipizzazione è utile, ma va usata con criterio. Ecco alcune buone pratiche da seguire quando scrivi funzioni in PHP.
- Usa sempre strict types nei progetti moderni, salvo casi particolari in cui devi mantenere compatibilità con codice legacy.
- Tipizza parametri e ritorni ogni volta che è possibile. Evita funzioni “ambigue” che accettano qualsiasi cosa.
- Scrivi funzioni piccole e focalizzate: una funzione dovrebbe fare una cosa sola, in modo chiaro.
- Evita di usare mixed senza motivo. È utile solo quando i dati possono davvero avere tipi diversi e non prevedibili.
- Valida i dati all’ingresso: non fidarti mai di input esterni come form, API o file.
- Usa nomi descrittivi per le funzioni e per i parametri, così il codice resta leggibile anche senza commenti.
- Non confondere validazione e trasformazione: una funzione può controllare un dato, un’altra può modificarlo. Tenerle separate migliora la qualità del codice.
Un errore comune è pensare che la tipizzazione sostituisca la validazione. In realtà non è così: dichiarare int $eta non garantisce che il valore sia logicamente corretto, ma solo che sia un intero. Per questo nel nostro esempio abbiamo aggiunto anche il controllo sul range dell’età.
In un progetto professionale, la combinazione ideale è: tipizzazione + validazione + funzioni ben separate. Questo rende il codice robusto e facile da testare.
Riepilogo
La tipizzazione dei parametri e dei valori di ritorno è una delle tecniche più utili quando si scrivono funzioni in PHP. Ti permette di definire contratti chiari, ridurre gli errori e migliorare la leggibilità del codice.
Nel tutorial abbiamo visto un esempio pratico con tre funzioni:
- una funzione per formattare un nome;
- una funzione per validare un’età;
- una funzione che combina le due precedenti per generare un messaggio finale.
Il messaggio principale è semplice: scrivere funzioni tipizzate significa scrivere codice più affidabile. È una scelta che paga nel tempo, soprattutto quando il progetto cresce e viene mantenuto da più sviluppatori.
Approfondisci con risorse ufficiali
- PHP Manual - Types: documentazione ufficiale sui tipi in PHP.
- PHP Manual - Functions: riferimento completo sulla sintassi delle funzioni.
- PHP Manual - strict_types: approfondimento sul comportamento rigoroso dei tipi.
- PHP Manual - Return Types: guida ai tipi di ritorno nelle funzioni.
- PHP Manual - Type Declarations: panoramica sulle dichiarazioni di tipo per parametri e proprietà.
