Introduzione
PHP prosegue con il suo avanzamento attraverso versioni Minor con PHP 8.1 rilasciato a novembre 2021. Questa versione include caratteristiche significative, tra cui Enumerazioni, Fibers, e molto altro.
1. Enumerazioni (Enums)
Una delle caratteristiche più attese in PHP 8.1 sono le Enumerazioni (Enums). Gli Enums permettono di definire una serie di valori costanti e gestire variabili che possono contenere solo uno di questi valori, migliorando la robustezza del codice.
Il tipo enum è rappresentato internamente come una classe.
Le enumerazioni sono oggetti e hanno: una proprietà ‘name’ che è il nome enumerazione.
Le enumerazioni possono essere associate ad uno scalare es una stringa ad esempio allo scopo di essere salvata in un database.
Le enumerazioni associate a uno scalare es una stringa hanno anche la proprietà ‘value’
enum Status: string {
case Active = 'active';
case Inactive = 'inactive';
case Archived = 'archived';
}
function setStatus(Status $status) {
// Gestisce lo stato
}
setStatus(Status::Active);
setStatus(Status::Inactive);
echo Status::Active->name; // prints "Active"
echo Status::Active->value; // prints "active"
2. Fibers
Le Fibers sono un’implementazione di primitive di concorrenza. Esse sono di aiuto per la programmazione asincrona in PHP. Consentono tra l’altro di semplificare il codice delle Promise o le coroutine di Generator, e la sospensione e la ripresa di funzioni asincrone.
$fiber = new Fiber(function(): void {
echo "Fiber in esecuzione";
Fiber::suspend();
echo "Fiber ripreso";
});
$fiber->start();
echo "Codice principale";
$fiber->resume();
$response = $httpClient->request('https://example.com/');
print json_decode($response->getBody()->buffer())['code'];
3. Intersezione dei Tipi (Intersection Types)
Gli Intersection Types permettono di richiedere che un parametro appartenga a più di un tipo allo stesso tempo. È particolarmente utile quando si lavora con interfacce.
function processData(A & B $data) {
// Funzione che richiede oggetti che implementano sia A che B
}
4. Readonly Properties
Le proprietà di sola lettura non possono essere modificate dopo l’inizializzazione, ovvero dopo che è stato loro assegnato un valore.
class User {
public readonly string $username;
public function __construct(string $username) {
$this->username = $username;
}
}
$user = new User("Biagio");
// $user->username = "NuovoNome"; // Questo genererebbe un errore
4. Array is_list
La nuova funzione array_is_list consente di verificare se un array è una lista, cioè se ha chiavi sequenziali partendo da 0.
$result = array_is_list(['a', 'b', 'c']); // true
5. Performance Improvements
PHP 8.1 introduce vari miglioramenti di performance, inclusi quelli per le opcache e la gestione della memoria. Questo rende PHP 8.1 ancora più veloce e reattivo, specialmente per applicazioni su larga scala.
Conclusione
PHP 8.1 continua a potenziare il linguaggio, offrendo miglioramenti sia nelle funzionalità che nelle performance. Le nuove funzioni come Enums e Fibers aprono nuove strade per lo sviluppo in PHP, permettendo di scrivere codice più robusto e flessibile.
Riferimenti Utili
- Sito Ufficiale di PHP: documentazione completa e changelog.
- Migrating to PHP 8.1 – New Features: descrizione ufficiale delle novità in PHP 8.1.
- Enumerazioni (Enums)
- Fibers
- Intersection Types
- Array is_list
- Ottimizzazioni delle Prestazioni