Novità di PHP 8.5

Novità di PHP 8.5

Novità di PHP 8.5

Guida tecnica alle nuove funzionalità, impatti sui framework e best practice per la migrazione

Indice Novità di PHP 8.5

  1. Panoramica delle novità principali di PHP 8.5
  2. Tabella comparativa: PHP 8.4 vs PHP 8.5
  3. Impatto sui principali framework PHP
  4. Best practice per la migrazione a PHP 8.5
  5. Perché migrare e gli errori da evitare
  6. Conclusioni e formazione continua

1. Panoramica delle novità principali di PHP 8.5

PHP 8.5, rilasciato il 20 novembre 2025, è un aggiornamento maggiore del linguaggio che porta con sé una serie di funzionalità pensate per rendere il codice più espressivo, sicuro e performante. Non si tratta di una rivoluzione, ma di un’evoluzione intelligente: ogni nuova funzionalità risponde a un problema concreto che gli sviluppatori affrontano quotidianamente.

Se sei alle prime armi con PHP, sappi che PHP è il linguaggio server-side più diffuso al mondo, usato da oltre il 77% dei siti web con un backend conosciuto, da piccoli blog a piattaforme come Facebook nella sua versione originale e Wikipedia. Ogni nuova versione porta miglioramenti che permettono di scrivere meno codice, fare meno errori e girare più veloce.

1.1 URI Extension nativa

Una delle novità più attese: PHP 8.5 introduce una estensione URI integrata, sempre disponibile senza installare nulla. Finora, per analizzare un URL si usava la funzione parse_url(), che restituiva un array grezzo e poco affidabile. Ora esiste una classe dedicata, conforme agli standard RFC 3986 e WHATWG URL.

// PHP 8.4 e precedenti

$components = parse_url('https://php.net/releases/8.5/en.php');

var_dump($components['host']); // string(7) "php.net"

// PHP 8.5

use Uri\Rfc3986\Uri;

$uri = new Uri('https://php.net/releases/8.5/en.php');

var_dump($uri->getHost()); // string(7) "php.net"

Il vantaggio? Validazione automatica, normalizzazione sicura e un’API orientata agli oggetti molto più leggibile e robusta.

1.2 Operatore Pipe |>

L’operatore pipe è probabilmente la funzionalità più amata da chi viene da linguaggi come Elixir, F# o dalla shell Unix. Permette di concatenare funzioni in sequenza, passando il risultato di una come input della successiva — eliminando i classici annidamenti “a cipolla” difficili da leggere.

// PHP 8.4: codice annidato, si legge dall'interno verso l'esterno

$slug = strtolower(str_replace('.', '', str_replace(' ', '-', trim($title))));

// PHP 8.5: si legge dall'alto verso il basso, come una pipeline

$slug = $title

    |> trim(...)

    |> (fn($s) => str_replace(' ', '-', $s))

    |> (fn($s) => str_replace('.', '', $s))

    |> strtolower(...);

Questo migliora drammaticamente la leggibilità nei casi in cui si applicano più trasformazioni in sequenza su uno stesso valore — operazioni comunissime in data processing, validazione form e generazione di slug o token.

1.3 Clone With: clonare e modificare in un colpo solo

Nelle classi readonly, modificare una proprietà richiedeva acrobazie verbose. PHP 8.5 introduce una sintassi compatta per clonare un oggetto aggiornando solo le proprietà desiderate:

// PHP 8.5

public function withAlpha(int $alpha): self {

    return clone($this, ['alpha' => $alpha]);

}

Questo pattern, detto “wither”, è fondamentale nei Value Object e nella programmazione immutabile. Con PHP 8.5 diventa finalmente naturale e idiomatico.

1.4 Attributo #[\NoDiscard]

Quante volte hai chiamato una funzione dimenticando di usarne il valore restituito? Con il nuovo attributo #[\NoDiscard], PHP emette un warning automatico ogni volta che si ignora il return value di una funzione marcata. Questo rende le API più sicure e aiuta a rilevare bug prima che arrivino in produzione.

#[\NoDiscard]

function getPhpVersion(): string { return 'PHP 8.5'; }

getPhpVersion(); // Warning: return value non utilizzato!

Per indicare esplicitamente che si vuole ignorare il valore, si usa il nuovo cast (void): (void) getPhpVersion();.

1.5 Closure e First-Class Callable in espressioni costanti

PHP 8.5 permette ora di usare closure statiche e callable nei parametri degli attributi, nelle proprietà e nelle costanti. Questo sblocca scenari avanzati come il controllo degli accessi dichiarativo direttamente negli attributi delle classi, senza passare per stringe o logiche runtime.

1.6 cURL Share Handle persistenti

Per le applicazioni ad alto traffico, questa novità può fare una differenza significativa sulle performance. Con curl_share_init_persistent(), gli handle cURL vengono mantenuti tra una request PHP e l’altra, evitando di reinizializzare le connessioni DNS e TCP ogni volta. Il risultato: meno latenza, meno overhead, più velocità.

1.7 array_first() e array_last()

Due piccole funzioni molto attese: array_first() e array_last() restituiscono rispettivamente il primo e l’ultimo elemento di un array, oppure null se è vuoto. Finora il codice equivalente richiedeva tre o quattro passaggi. Ora basta una riga.

$lastEvent = array_last($events); // null se $events è vuoto

1.8 Altre novità degne di nota

PHP 8.5 porta con sé altre aggiunte interessanti. I Fatal Error ora includono un backtrace completo, rendendo il debugging molto più rapido. Gli attributi possono ora essere applicati alle costanti. Il metodo Closure::getCurrent() semplifica la ricorsione nelle funzioni anonime. La funzione setcookie() supporta ora il flag “partitioned” per i cookie di terze parti. Sono disponibili le nuove funzioni get_error_handler() e get_exception_handler() per ispezionare gli handler attivi. Infine, le proprietà statiche supportano ora la visibilità asimmetrica.

2. Tabella comparativa: PHP 8.4 vs PHP 8.5

La tabella seguente riassume le principali differenze tra PHP 8.4 e PHP 8.5, utile sia per chi sta valutando la migrazione sia per chi vuole avere un colpo d’occhio rapido sulle novità:

FunzionalitàPHP 8.4PHP 8.5
URI Extension nativaNon disponibile, solo parse_url()Sì, classe Uri\Rfc3986\Uri e WHATWG
Operatore Pipe |>Non supportatoSupportato nativamente
Clone con proprietàWorkaround manuale con get_object_vars()clone($obj, [‘prop’ => val]) nativo
Attributo #[NoDiscard]Non disponibileWarning automatico se return ignorato
Closure in costantiNon supportatoSupportato in attributi e default values
cURL Share PersistenteHandle distrutto ad ogni requestcurl_share_init_persistent() disponibile
array_first/array_lastSolo con array_key_first/last verbosoarray_first() e array_last() native
Fatal Error backtraceNon incluso nel messaggioBacktrace incluso automaticamente
#[Deprecated] su traitNon supportatoSupportato su trait e costanti
Proprietà final via promotionNon supportatoSupportato
Operatore backtick “Alias funzionante per shell_exec()Deprecato
Cast non canonici(boolean), (integer) validiDeprecati, usare (bool), (int), (float)
__sleep / __wakeupMetodi magic attiviSoft-deprecated, usare __serialize/__unserialize

3. Impatto sui principali framework PHP

PHP 8.5 porta benefici concreti anche su chi non scrive PHP “puro” ma lavora con i grandi framework. Vediamo i più usati.

3.1 Laravel

Laravel è il framework PHP più popolare al mondo. La buona notizia è che Laravel 11, l’ultima versione stabile, supporta già PHP 8.3 e 8.4, e la community ha già anticipato compatibilità con PHP 8.5. Le novità che impattano maggiormente Laravel sono il Pipe Operator, che si sposa perfettamente con le Pipeline di Laravel e i Fluent Builder, e il Clone With, che semplificherà il lavoro con i Value Object usati nei DTO (Data Transfer Object) e nelle Eloquent queries. Attenzione però: alcune deprecazioni di PHP 8.5 come __sleep e __wakeup, potrebbero richiedere aggiornamenti ai pacchetti di terze parti. Prima di migrare, esegui sempre composer update e verifica eventuali warning con rector/rector.

3.2 Symfony

Symfony è il framework enterprise di riferimento, usato in grandi progetti aziendali. Symfony ha una politica molto rigorosa sulla compatibilità PHP e aggiorna i propri componenti rapidamente. L’URI Extension nativa di PHP 8.5 è particolarmente rilevante per Symfony, che gestisce internamente moltissime operazioni di routing e URL matching: nel tempo, i componenti HttpFoundation e Routing potrebbero beneficiare di questa nuova API standardizzata. Anche l’attributo #[\NoDiscard] si integra perfettamente con la filosofia di Symfony, che fa un uso massivo degli attributi PHP per configurazione e routing.

3.3 WordPress e CMS basati su PHP

WordPress alimenta circa il 43% dei siti web del pianeta. Tradizionalmente più conservativo nell’adozione delle nuove versioni PHP, WordPress ha alzato i requisiti minimi nel tempo (attualmente richiede PHP 7.2+, raccomanda PHP 8.x). PHP 8.5 non introduce breaking change così gravi da bloccare WordPress, ma le deprecazioni — in particolare il backtick operator e i cast non canonici — potrebbero generare warning su plugin e temi legacy. Si raccomanda di testare l’ambiente WordPress in staging prima di aggiornare PHP in produzione.

3.4 Altri framework: CodeIgniter, Laminas, CakePHP

CodeIgniter 4, Laminas (ex Zend Framework) e CakePHP 5 supportano già PHP 8.x e saranno aggiornati per PHP 8.5 nei rispettivi cicli di release. Il consiglio generale vale per tutti: aggiornare le dipendenze, testare con PHPUnit o Pest, e usare strumenti come PHPStan o Psalm per identificare preventivamente i punti critici.

4. Best practice per la migrazione a PHP 8.5

Migrare a una nuova versione di PHP non significa semplicemente cambiare la versione nel php.ini. Un approccio metodico riduce i rischi e garantisce un upgrade sicuro.

4.1 Fase 1: Analisi e audit del codice

Prima di fare qualsiasi cosa, analizza il codice esistente. Usa strumenti statici come PHPStan (a livello massimo) o Psalm per rilevare l’uso di funzionalità deprecate. Il progetto Rector (https://getrector.com) può automatizzare parte del refactoring, identificando pattern da aggiornare. Controlla in particolare: l’uso del backtick operator come alias di shell_exec(), i cast non canonici come (boolean) e (integer), e i metodi magic __sleep e __wakeup.

4.2 Fase 2: Ambiente di test isolato

Non aggiornare mai PHP in produzione senza aver testato in un ambiente identico. Usa Docker per creare un container con PHP 8.5 e replica l’ambiente di produzione. Esegui la suite di test completa. Se non hai una suite di test, questo è il momento giusto per iniziare a costruirla.

4.3 Fase 3: Aggiornamento dipendenze

Aggiorna prima di tutto le dipendenze via Composer: esegui composer update e verifica che tutti i pacchetti abbiano dichiarato compatibilità con PHP 8.5. Controlla il file composer.json per vincoli di versione che potrebbero bloccare l’aggiornamento.

4.4 Fase 4: Deploy progressivo

Per applicazioni ad alto traffico, considera un rilascio progressivo (canary release o blue-green deployment). Monitora i log di sistema per i warning — in particolare quelli legati al nuovo attributo #[\NoDiscard] e alle deprecazioni — nei primi giorni dopo il deploy.

5. Perché migrare e gli errori da evitare

5.1 Perché conviene migrare a PHP 8.5

Restare su versioni vecchie di PHP ha un costo reale: versioni non supportate non ricevono patch di sicurezza, il che espone l’applicazione a vulnerabilità note. PHP 8.5 porta miglioramenti concreti alle performance grazie alla gestione ottimizzata degli handle cURL e a ottimizzazioni interne del compilatore JIT (ereditato da PHP 8.0+). Inoltre, il codice scritto con le nuove funzionalità è più leggibile, più manutenibile e più facile da testare — il che riduce il costo di sviluppo nel lungo periodo. Infine, aggiornare periodicamente è molto meno traumatico che fare un salto da PHP 7.x a PHP 8.5 dopo anni di attesa.

5.2 Gli errori comuni da non fare

Il primo errore è aggiornare PHP senza aggiornare le dipendenze: il risultato sono incompatibilità silenziose che si manifestano solo in produzione. Il secondo errore è ignorare i warning: PHP 8.5 introduce deprecazioni che diventeranno errori fatali in PHP 9. Trattarle come rumore di fondo oggi significa ritrovarsi con un blocco critico domani. Il terzo errore è non avere test automatizzati: senza una suite di test, ogni aggiornamento è un salto nel buio. Il quarto errore è aggiornare tutto insieme — PHP, framework e dipendenze in un colpo solo — rendendo impossibile isolare la causa di eventuali problemi.

5.3 Il ciclo di vita del supporto

PHP 8.5 è in active support fino al novembre 2026 e riceverà security fix fino al novembre 2028. PHP 8.4 terminerà il supporto attivo nel novembre 2025. Pianificare la migrazione ora significa avere tutto il tempo per farlo con calma, senza pressione.

6. Conclusioni: la formazione continua fa la differenza

Le tecnologie evolvono a una velocità che, fino a pochi anni fa, avremmo faticato a immaginare. PHP 8.5 è arrivato a distanza di soli 12 mesi dalla versione 8.4, e PHP 9 è già all’orizzonte. Ogni release porta nuovi pattern, nuove deprecazioni e nuove opportunità. Per un team di sviluppo, restare al passo non è un’opzione: è una necessità competitiva.

Il rischio di non aggiornarsi non è solo tecnico (codice obsoleto, vulnerabilità di sicurezza, dipendenze incompatibili) ma anche economico: il debito tecnico si accumula silenziosamente e si paga con interesse nel momento meno opportuno, spesso durante un progetto critico o un lancio importante.

Ecco perché la formazione continua del team IT non dovrebbe mai essere vista come un costo, ma come un investimento diretto nella qualità e nella sicurezza dei progetti aziendali. Un team formato sui fondamenti di PHP e sulle ultime novità del linguaggio è un team che scrive meno bug, migra in modo sicuro e consegna prodotti migliori.

Per questo motivo, ti segnaliamo il Corso PHP di Innovaformazione, una proposta formativa pensata appositamente per le aziende, erogata in modalità online in classe virtuale, con calendario concordabile in base alle esigenze del team. Il corso copre sia le basi del linguaggio sia le evoluzioni più recenti, e si rivolge sia a sviluppatori alle prime armi sia a chi vuole consolidare e aggiornare le proprie competenze su PHP 8.x.

Un aspetto particolarmente interessante per le aziende: il corso è finanziabile tramite Fondimpresa, il fondo interprofessionale che permette alle imprese di formare i propri dipendenti gratuitamente utilizzando le risorse accantonate. Il team di Innovaformazione è disponibile per supportarti anche nella predisposizione del piano formativo Fondimpresa, semplificando tutta la parte burocratica.

Investire nella formazione del team PHP oggi significa evitare errori costosi domani e restare competitivi in un mercato che non aspetta.

(fonte) (fonte) (fonte)

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

    Ti potrebbe interessare

    Articoli correlati