Introduzione
PHP è un linguaggio in costante evoluzione, con aggiornamenti rilasciati periodicamente per migliorare le prestazioni, aggiungere nuove funzionalità e aumentare la sicurezza. Ogni versione Major, come PHP 8.0, introduce cambiamenti significativi rispetto alle versioni precedenti. PHP 8.0, rilasciato nel novembre 2020, rappresenta una delle release più importanti degli ultimi anni, con numerosi aggiornamenti al linguaggio e nuove funzionalità.
1. JIT Compiler (Just-In-Time)
Una delle principali novità di PHP 8.0 è l’integrazione di un JIT Compiler, che migliora le prestazioni del codice PHP compilando parti di esso in tempo reale. Il JIT può ridurre il tempo di esecuzione di script complessi, soprattutto in ambiti di elaborazione intensiva.
Documentazione ufficiale: JIT Compiler.
JIT è implementato nell’estensione Opcache, ed è necessario che l’estensione php Opcache sia attivata.
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size = 100M
opcache.jit = tracing
2. Operatore Nullsafe
L’operatore nullsafe consente di evitare errori di accesso a proprietà o metodi su oggetti nulli. È una soluzione compatta per la gestione del valore null.
L’operatore nullsafe consente di compattare il codice nei casi in cui bisogna verificare se un oggetto è null prima di accedere alle sue proprietà.
$userName = $user?->profile?->getName();
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
// do something with $country
// con l'operatore nullsafe il codice di prima si puo riscrivere in forma più compatta così:
$country = $session?->user?->getAddress()?->country;
// do something with $country
3. Named Arguments
PHP 8.0 introduce i named arguments, che permettono di specificare i valori degli argomenti associandoli direttamente ai loro nomi.
I Named Arguments consentono di passare argomenti a una funzione in base al nome del parametro, anziché alla posizione del parametro, ciò rende rende gli argomenti indipendenti dall’ordine in cui sono definiti nella firma della funzione. Inoltre, nel caso di di parametri opzionali con valori predefiniti, consente passare solo gli argomenti desiderati, saltando arbitrariamente i valori predefiniti.
Questa funzionalità migliora la leggibilità e la flessibilità del codice.
function createUser(string $name, int $age, bool $isActive) {
// Creazione utente
}
createUser(age: 30, name: "Mario", isActive: true);
Questo esempio di codice (che utilizz htmlspecialchars): mostra che non è piu necessario specificare tutti i valori predefiniti fino a quello che si vuole modificare. Gli Named Arguments consentono di sovrascrivere direttamente solo i valori predefiniti che si desidera modificare rispetto al valore di default.
htmlspecialchars — Convert special characters to HTML entities
htmlspecialchars(
string $string,
int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null,
bool $double_encode = true
): string
// con Named Arguments
htmlspecialchars($string, double_encode: false);
// senza Named Arguments
htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, null, false);
4. Union Types
Con union types è possibile specificare più tipi di dati sia per un parametro di input che per il valore di ritorno di una funzione.
function processInput(int|string $input): int|string {
// Logica di elaborazione
}
5. Funzione str_contains
PHP 8.0 introduce la funzione str_contains per verificare se una stringa contiene un’altra stringa. Questa funzione è molto utile per la gestione di stringhe e sostituisce soluzioni meno leggibili.
$result = str_contains("Hello, World!", "World"); // true
6. Funzione match
La nuova funzione match introduce un’espressione di controllo simile a switch, ma con una sintassi più pulita e flessibile, la funzione crestituisce l’esito del match che puo richiamare a sua volta una funzione.
$action = match ($status) {
1 => 'Active',
2 => 'Inactive',
default => 'Unknown',
};
Conclusione
PHP 8.0 è una versione ricca di innovazioni, che migliora le prestazioni del linguaggio e semplifica la scrittura del codice.
Riferimenti Utili
- Sito Ufficiale di PHP: documentazione e changelog.
- Migrating to PHP 8.0 – New Features: dettagli sulle nuove funzionalità di PHP 8.0.
- JIT Compiler