Novità PHP 8.4

Novità PHP 8.4

Novità PHP 8.4

Introduzione

PHP 8.4 rappresenta un’evoluzione significativa del linguaggio di programmazione più diffuso per lo sviluppo web server-side. Rilasciato ufficialmente il 21 novembre 2024, questo aggiornamento introduce funzionalità innovative che migliorano l’espressività del codice, la sicurezza e le prestazioni complessive dell’ambiente di esecuzione. La versione più recente della branch 8.4, identificata come PHP 8.4.13, è stata rilasciata il 25 settembre 2025 e continuerà a ricevere correzioni di bug e aggiornamenti di sicurezza fino al 31 dicembre 2026.

Cronologia delle release – Novità PHP 8.4

PHP 8.4 ha seguito il tradizionale ciclo di sviluppo del linguaggio, con una fase beta avviata nell’agosto 2024 e il rilascio stabile nel novembre dello stesso anno. La versione 8.4.13, attualmente l’ultima disponibile, rappresenta un aggiornamento incrementale che consolida le funzionalità introdotte nella major release, apportando correzioni di bug specifici e miglioramenti di stabilità. Il ciclo di supporto esteso, che garantisce quattro anni di manutenzione (due anni di bug fix e due anni di sole correzioni di sicurezza), testimonia l’impegno del team di sviluppo nel fornire una base solida per applicazioni enterprise di lunga durata.

Property Hooks: un nuovo paradigma per l’accesso alle proprietà

Una delle innovazioni più rilevanti introdotte in PHP 8.4 è il sistema dei Property Hooks, noti in altri linguaggi come “property accessors”. Questa funzionalità consente di intercettare e sovrascrivere il comportamento di lettura e scrittura delle proprietà di classe, eliminando la necessità di metodi getter e setter boilerplate mantenendo al contempo la possibilità di implementare logica di validazione e trasformazione.

Architettura e sintassi – Novità PHP 8.4

I Property Hooks si articolano in due operazioni fondamentali: get e set. Una proprietà può essere “backed” (supportata da uno storage effettivo) o “virtual” (priva di storage, con la logica interamente gestita dagli hooks). La sintassi completa prevede l’utilizzo di blocchi di codice racchiusi tra parentesi graffe:

class User
{
    private bool $isModified = false;
    
    public string $email = 'user@example.com' {
        get {
            return strtolower($this->email);
        }
        set(string $value) {
            if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                throw new InvalidArgumentException('Invalid email format');
            }
            $this->email = $value;
            $this->isModified = true;
        }
    }
}

In questo scenario contestualizzato, la proprietà $email implementa una validazione automatica durante la scrittura e una normalizzazione durante la lettura, mantenendo contestualmente traccia dello stato di modifica dell’oggetto. La sintassi supporta inoltre forme abbreviate tramite arrow function per operazioni monoespressione:

class Product
{
    public float $price = 0.0 {
        get => round($this->price, 2);
        set => max(0.0, $value);
    }
}

Proprietà virtuali e casi d’uso

Le proprietà virtuali rappresentano un’applicazione avanzata degli hooks, consentendo di definire proprietà derivate che non occupano spazio in memoria. Un esempio paradigmatico è il calcolo dell’area di un rettangolo:

class Rectangle
{
    public int $area {
        get => $this->height * $this->width;
    }
    
    public function __construct(
        public int $height,
        public int $width
    ) {}
}

$rect = new Rectangle(10, 20);
echo $rect->area; // Output: 200
$rect->area = 300; // Error: nessuna operazione set definita

Questa funzionalità risulta particolarmente utile in contesti di domain modeling, dove proprietà calcolate possono essere esposte come attributi dell’oggetto senza necessità di metodi espliciti, migliorando la leggibilità e l’intuitività dell’API.

Ereditarietà e final hooks

Gli hooks supportano meccanismi di ereditarietà analoghi ai metodi. Una classe figlia può ridefinire selettivamente gli hooks di una proprietà ereditata, oppure dichiarare hooks come final per impedirne l’override:

class BaseEntity
{
    public string $identifier {
        final set => strtoupper($value);
    }
}

class SpecializedEntity extends BaseEntity
{
    public string $identifier {
        get => 'ID-' . $this->identifier; // Permesso
        // set => strtolower($value); // Errore: hook set è final
    }
}

L’accesso agli hooks del parent può essere ottenuto tramite la sintassi parent::$propertyName::get() o parent::$propertyName::set($value), preservando la possibilità di estendere comportamenti esistenti piuttosto che sovrascriverli completamente.

Asymmetric Visibility: controllo granulare degli accessi – Novità PHP 8.4

L’asymmetric visibility introduce la possibilità di definire visibilità distinte per le operazioni di lettura e scrittura su proprietà di classe. Questa funzionalità colma una lacuna significativa nel sistema di controllo degli accessi di PHP, consentendo di esporre proprietà pubblicamente leggibili ma privatamente o protettivamente scrivibili.

Sintassi e modalità di utilizzo

La dichiarazione di visibilità asimmetrica utilizza una sintassi a prefisso derivata dal linguaggio Swift:

class Entity
{
    public private(set) string $id;
    public protected(set) DateTime $createdAt;
    
    public function __construct()
    {
        $this->id = uniqid('entity_', true);
        $this->createdAt = new DateTime();
    }
}

$entity = new Entity();
echo $entity->id; // Permesso: lettura pubblica
$entity->id = 'new_id'; // Errore: scrittura privata

La sintassi supporta una forma abbreviata per il caso più comune (lettura pubblica, scrittura ristretta), dove il modificatore public può essere omesso:

class Book
{
    public function __construct(
        private(set) string $title,
        protected(set) string $isbn
    ) {}
}

Interazione con readonly e property hooks

L’asymmetric visibility è completamente indipendente dai property hooks ma può essere combinata con essi per ottenere controlli sofisticati. Un aspetto rilevante è l’interazione con il modificatore readonly: a partire da PHP 8.4, readonly implica protected(set) anziché private(set), permettendo alle classi figlie di inizializzare proprietà readonly del parent. Per ottenere il comportamento di private(set), è necessario dichiararlo esplicitamente:

class ImmutableEntity
{
    // Implica protected(set)
    public readonly string $uuid;
    
    // Esplicitamente private(set) e implicitamente final
    public private(set) readonly DateTime $timestamp;
}

Una proprietà dichiarata private(set) diventa implicitamente final, impedendone la ridefinizione nelle classi figlie, coerentemente con l’intento di impedire modifiche esterne al controllo della classe.

Casi d’uso in architetture enterprise

L’asymmetric visibility trova applicazione naturale in pattern come il dirty tracking:

class ActiveRecord
{
    public private(set) bool $isDirty = false;
    private array $attributes = [];
    
    public function setAttribute(string $key, mixed $value): void
    {
        $this->attributes[$key] = $value;
        $this->isDirty = true;
    }
    
    public function save(): void
    {
        if ($this->isDirty) {
            // Persiste le modifiche
            $this->isDirty = false;
        }
    }
}

Questo pattern consente di esporre lo stato interno dell’oggetto come proprietà pubblica leggibile, eliminando metodi getter boilerplate pur mantenendo il controllo completo sulle modifiche.

DOM API aggiornata e supporto HTML5 – Novità PHP 8.4

PHP 8.4 introduce un’implementazione moderna dell’API DOM con supporto completo per HTML5, risolvendo limitazioni di lunga data nella gestione di documenti HTML. Le nuove classi DOM\HTMLDocument e DOM\XMLDocument sostituiscono le precedenti implementazioni, offrendo parsing conforme agli standard WHATWG e gestione migliorata degli encoding.

Miglioramenti delle prestazioni e pulizia generale

La versione 8.4 include ottimizzazioni interne al motore di esecuzione, particolarmente evidenti nell’handling di array e oggetti di grandi dimensioni. Sono stati rimossi simboli deprecati e funzionalità obsolete, promuovendo pratiche di programmazione più sicure e allineate agli standard contemporanei.

PHP 8.5: prospettive future

PHP 8.5 è attualmente in fase di sviluppo attivo, con rilascio previsto per novembre 2025. Al momento della stesura di questo articolo, sono disponibili build di test per sviluppatori che desiderano valutare le funzionalità in anteprima. Si raccomanda di monitorare i canali ufficiali php.net per aggiornamenti sulle RFC approvate e sulle feature pianificate.

Guida alla migrazione da PHP 8.3 a PHP 8.4 – Novità PHP 8.4

Valutazione preliminare

Prima di procedere con la migrazione, è fondamentale eseguire un’analisi statica del codebase utilizzando strumenti come PHPStan o Psalm configurati per PHP 8.4. Questi strumenti identificheranno utilizzi di funzionalità deprecate e potenziali incompatibilità.

Deprecazioni rilevanti

PHP 8.4 depreca alcune funzionalità che verranno rimosse in PHP 9.0. È essenziale identificare e rifattorizzare il codice che:

  • Utilizza chiamate implicite a __toString() in contesti non-string
  • Fa affidamento su comportamenti legacy nell’handling di referenze
  • Implementa override non compatibili di metodi interni

Testing progressivo

Si raccomanda un approccio incrementale:

  1. Ambiente di test isolato: predisporre un ambiente con PHP 8.4.13 parallelo alla produzione
  2. Test suite completa: eseguire l’intera suite di test automatizzati
  3. Load testing: verificare le prestazioni sotto carico realistico
  4. Monitoring: implementare logging dettagliato per identificare warning e notice

Adozione delle nuove funzionalità

L’introduzione di property hooks e asymmetric visibility può essere graduale. Si suggerisce di:

  • Identificare classi con numerosi getter/setter boilerplate come candidati per property hooks
  • Rifattorizzare proprietà readonly con necessità di visibilità protected verso asymmetric visibility
  • Documentare decisioni architetturali nel codice per facilitare la manutenzione futura

Gestione delle dipendenze

Verificare che tutte le dipendenze di terze parti siano compatibili con PHP 8.4. Consultare i changelog delle librerie utilizzate e aggiornarle alle versioni che dichiarano supporto esplicito per PHP 8.4.

Conclusioni e formazione continua – Novità PHP 8.4

L’evoluzione continua del linguaggio PHP sottolinea l’importanza strategica della formazione continua per i team di sviluppo. Le organizzazioni che investono nell’aggiornamento delle competenze tecniche dei propri sviluppatori ottengono vantaggi competitivi significativi in termini di qualità del codice, manutenibilità e capacità di adozione di best practice contemporanee.

Per le aziende che desiderano investire nella formazione del proprio personale, Innovaformazione offre un percorso formativo completo e personalizzabile attraverso il Corso PHP. Il corso è specificamente progettato per contesti aziendali, con preventivi dedicati e calendari concordabili secondo le esigenze organizzative. La modalità di erogazione online in classe virtuale garantisce flessibilità senza compromettere l’interattività e la qualità didattica.

Un aspetto particolarmente rilevante per le imprese è la possibilità di accedere a formazione completamente gratuita attraverso Fondimpresa o altri fondi interprofessionali. Innovaformazione fornisce supporto completo nella gestione dei progetti di formazione finanziata, occupandosi dell’intero processo amministrativo e consentendo alle aziende di focalizzarsi esclusivamente sui risultati formativi.

L’investimento nella formazione tecnica del team di sviluppo non rappresenta semplicemente un costo, ma un moltiplicatore di efficienza che si traduce in codice di qualità superiore, riduzione del debito tecnico e capacità di sfruttare appieno le innovazioni che il linguaggio PHP continua a offrire.

(fonte) (fonte) (fonte) (fonte)

Innovaformazione, scuola informatica specialistica promuova la cultura del PHP utilizzato in maniera consapevole e propone formazione su PHP per le aziende. Per visionare il catalogo corsi completo invitiamo a cliccare QUI.

Per altri articolo tecnici consigliamo di navigare sul nostro blog QUI.

INFO: info@innovaformazione.net – TEL. 3471012275 (Dario Carrassi)

Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:

    Ti potrebbe interessare

    Articoli correlati