PHP 8.0: le novità della nuova versione

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

PHP 8.2: le novità della nuova versione

PHP 8.2 ha portato numerosi miglioramenti, nuove funzionalità e ottimizzazioni che rendono il linguaggio più moderno e sicuro, oltre a facilitare il lavoro degli sviluppatori. Qui di seguito ti elenco le principali novità introdotte da questa versione.

  1. Tipi di Dati ‘Readonly’ per le Proprietà di Classe

Con PHP 8.2, è stato introdotto il supporto per le proprietà readonly in classi e oggetti. Questa funzionalità permette di dichiarare proprietà che possono essere assegnate solo una volta, durante la creazione dell’oggetto, e poi non possono essere modificate. Questo miglioramento contribuisce alla creazione di oggetti immutabili.


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

  1. Deprecazione delle Proprietà Dinamiche

Con PHP 8.2, viene deprecato l’uso di proprietà dinamiche. Le proprietà dinamiche sono le proprietà aggiungere agli oggetti non previste nella definizione delle classe. A partire da questa versione, le proprietà dinamiche generano un avviso deprecazione e, in futuro, questa caratteristica potrebbe essere rimossa. Questo cambiamento incoraggia un design più rigoroso delle classi.


class Person {
public string $name;
}
$person = new Person();
$person->age = 30; // Genera un avviso di deprecazione

  1. Classi e Interfacce Final

2. Funzione randomizer per la Generazione di Numeri Casuali

Con PHP 8.2, è stata introdotta la funzione randomizer che consente una generazione casuale di numeri più sicura e avanzata. Questa funzione offre vari metodi per personalizzare la generazione di numeri, stringhe e byte casuali.


$random = new Randomizer(new Random\Engine\Mt19937());
echo $random->getInt(1, 100);

3. Nuovi Tipi di Pseudo-Interfacce

PHP 8.2 aggiunge i nuovi tipi di pseudo-interfacce, come Arrayable e Stringable. Questi tipi di interfacce aiutano a rendere il codice più chiaro e a rafforzare il controllo dei tipi.


class MyClass implements Stringable {
    public function __toString(): string {
        return 'Hello';
    }
}

4. Supporto per Parametri Sensibili

La funzione sensitive parameter consente di marcare i parametri di una funzione come sensibili, evitando la registrazione di informazioni riservate nei log. Questo migliora la sicurezza nella gestione dei dati sensibili.


function login(SensitiveParameter $password) {
    // Operazioni di login
}

Ecco alcuni riferimenti utili per approfondire ulteriormente le novità e i cambiamenti introdotti in PHP 8.2, nonché per rimanere aggiornati sulle future versioni del linguaggio:

  1. Sito Ufficiale di PHPphp.net: il sito ufficiale di PHP, dove puoi trovare la documentazione completa, i changelog delle versioni e le note di rilascio per ciascuna versione.

  2. Manuale di PHP 8.2php.net/releases/8.2: una guida dettagliata alle funzionalità introdotte in PHP 8.2, completa di esempi e spiegazioni tecniche.

  3. PHP RFCs (Request for Comments)wiki.php.net/rfc: il sito RFC di PHP, dove gli sviluppatori e la comunità propongono, discutono e votano sulle nuove funzionalità. Qui puoi esplorare il processo decisionale dietro ogni nuova funzionalità introdotta.

  4. PHP News e Blogphpdeveloper.org e phpweekly.com: risorse utili per seguire le novità del linguaggio e le discussioni su casi d’uso, buone pratiche e aggiornamenti di sicurezza.

  5. Comunità PHP su GitHubgithub.com/php: il repository ufficiale di PHP su GitHub, dove puoi seguire lo sviluppo, contribuire o semplicemente rimanere informato sulle modifiche in tempo reale.

Queste risorse offrono un supporto completo e aggiornato, e ti aiuteranno a integrare al meglio le novità di PHP 8.2.