La digitazione rigorosa in PHP, nota anche come “strict typing”, è un modo per specificare che le funzioni e i metodi devono rispettare rigorosamente i tipi di parametro e i tipi di ritorno dichiarati. Questo comportamento è diverso dalla digitazione flessibile, che è il comportamento predefinito di PHP, dove i tipi di dati possono essere implicitamente convertiti da un tipo all’altro.
Nella digitazione rigorosa, se si tenta di passare un argomento di tipo errato a una funzione o metodo, PHP genererà un errore di tipo. Analogamente, se una funzione deve restituire un valore di un certo tipo e un valore di tipo diverso viene restituito, si genererà un errore.
Per abilitare la digitazione rigorosa in PHP, è necessario dichiararla all’inizio di un file utilizzando la direttiva `declare(strict_types=1);`. Ecco un esempio:
```
declare(strict_types=1);
function addNumbers(int $a, int $b): int {
return $a + $b;
}
echo addNumbers(1, 2); // 3
echo addNumbers(1, ‘2’); // Fatal error: Uncaught TypeError
?>
```
In questo esempio, la funzione `addNumbers` prende due parametri di tipo `int` e restituisce un `int`. Grazie alla dichiarazione `declare(strict_types=1);`, passare una stringa come `‘2’` alla funzione `addNumbers` provocherà un errore.
Vantaggi della digitazione rigorosa:
1. Maggiore sicurezza del codice: Aiuta a prevenire errori difficili da tracciare causati dalla coercizione implicita dei tipi.
2. Migliore leggibilità e manutenzione del codice: Il tipo di dati attesi è chiaro e esplicito, rendendo il codice più leggibile e più facile da mantenere.
3. Rilevamento precoce degli errori: Gli errori di tipo sono rilevati durante lo sviluppo, riducendo la possibilità di bug in fase di produzione.
Esempi aggiuntivi di digitazione rigorosa:
```
declare(strict_types=1);
function divide(float $a, float $b): float {
if ($b === 0.0) {
throw new Exception(‘Division by zero’);
}
return $a / $b;
}
try {
echo divide(10.0, 2.0); // 5.0
echo divide(10, 2.0); // Fatal error: Uncaught TypeError
} catch (Exception $e) {
echo $e->getMessage();
}
?>
```
In questo caso, la funzione `divide` richiede due parametri `float` e restituisce un `float`. Passare un `int` come `10` senza la stretta digitazione andrebbe bene, ma con `strict_types=1`, ciò genererà un errore.
Fonti utili:
1. [Documentazione ufficiale di PHP](https://www.php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration)
2. [Guida alla digitazione rigorosa in PHP su PHP.net](https://www.php.net/manual/en/language.types.declarations.php#language.types.declarations.strict)
3. [Articolo su digitazione rigorosa su “PHP The Right Way”](https://phptherightway.com/#type_declarations)
Queste fonti forniscono una panoramica dettagliata della digitazione rigorosa in PHP, con esempi e spiegazioni approfondite.