La storia di PHP: da script personale a motore di tre quarti del web

Trent'anni di PHP, dagli strumenti CGI di Rasmus Lerdorf alle property hooks di PHP 8.4: come un linguaggio nato per caso è diventato una piattaforma matura

7 min di letturaPHP

Luigi Iadicola, Programmatore - Napoli

In questo articolo

Questo è il primo capitolo di una serie sulla storia di tre linguaggi che hanno costruito il backend moderno: PHP, Java e C#. Partiamo da quello più sottovalutato e, allo stesso tempo, più diffuso. La storia di PHP è la storia di un linguaggio che nessuno aveva progettato per diventare un linguaggio, e che oggi gira sotto circa tre quarti dei siti web di cui si conosce la tecnologia lato server.

1994: un curriculum online e qualche binario in C

Nel 1994 Rasmus Lerdorf, programmatore danese-canadese, voleva sapere chi visitava il suo curriculum online. Scrisse un insieme di programmi CGI in C per tracciare le visite e generare pagine dinamiche. Li chiamò Personal Home Page Tools: PHP, appunto.

Non c'era nessuna ambizione di creare un linguaggio. Lerdorf ha sempre raccontato di aver aggiunto funzionalità solo quando gli servivano, e questo spiega molto dell'inconsistenza storica della libreria standard: nomi di funzione con convenzioni diverse, ordine dei parametri imprevedibile. PHP è cresciuto per accumulo, non per progetto.

Nel giugno 1995 Lerdorf rese pubblico il codice come PHP Tools 1.0, permettendo ad altri di usarlo e correggerlo. Seguì PHP/FI (Forms Interpreter), che nel 1997 contava già migliaia di siti.

1997–1998: Gutmans, Suraski e PHP 3

La svolta arrivò da due studenti israeliani, Andi Gutmans e Zeev Suraski, che usavano PHP/FI per un progetto universitario di e-commerce e lo trovavano troppo limitato. Riscrissero il parser da zero, in collaborazione con Lerdorf. Il risultato fu PHP 3, rilasciato nel giugno 1998.

Con PHP 3 cambia anche il nome: non più Personal Home Page, ma l'acronimo ricorsivo PHP: Hypertext Preprocessor. Arriva un'architettura estendibile, che permette di aggiungere moduli per database e protocolli. È qui che PHP smette di essere lo strumento di una persona e diventa un progetto di comunità.

2000: Zend Engine e PHP 4

Gutmans e Suraski non si fermarono. Riscrissero il cuore dell'interprete, chiamandolo Zend Engine (dalla fusione dei loro nomi, Zeev e Andi), e fondarono l'azienda Zend. Nel maggio 2000 uscì PHP 4: più veloce, con sessioni native, output buffering e supporto a più web server.

Sono gli anni della bolla dot-com e dello stack LAMP (Linux, Apache, MySQL, PHP): gratuito, semplice da installare, disponibile su qualunque hosting condiviso da pochi euro al mese. Questa accessibilità è il vero segreto del successo di PHP. Carichi un file via FTP, ricarichi la pagina, funziona.

2004: PHP 5 e la programmazione a oggetti vera

PHP 4 aveva le classi, ma il modello a oggetti era rudimentale: gli oggetti venivano copiati per valore, senza visibilità dei membri né interfacce. PHP 5, rilasciato nel luglio 2004 con lo Zend Engine 2, portò un modello a oggetti serio: oggetti passati per handle, public/private/protected, interfacce, classi astratte, eccezioni.

Con PHP 5.1 arrivò PDO, un'astrazione uniforme per l'accesso ai database con prepared statement, fondamentale contro la SQL injection che aveva reso famosi (in negativo) tanti siti PHP dell'epoca.

In questi anni nascono i progetti che definiranno l'ecosistema: WordPress (2003), Drupal, Symfony (2005). Facebook stesso nasce in PHP nel 2004.

Il fallimento di PHP 6

Ogni storia seria ha un capitolo scomodo. Quello di PHP si chiama PHP 6. L'obiettivo era ambizioso: supporto Unicode nativo in tutto il linguaggio, con le stringhe rappresentate internamente in UTF-16. Il progetto si rivelò troppo lento, troppo complesso e troppo avido di memoria. Nel 2010 fu abbandonato.

Le funzionalità già pronte confluirono in PHP 5.3 e 5.4, e quando anni dopo si arrivò alla major successiva la comunità votò di saltare direttamente al 7, per non creare confusione con libri e articoli che già parlavano di un "PHP 6" mai esistito.

2009–2012: namespace, Composer e la maturità dell'ecosistema

PHP 5.3 (2009) introdusse namespace, closure e late static binding. PHP 5.4 (2012) aggiunse i trait e la sintassi corta degli array. Sembrano dettagli, ma sono i mattoni su cui si regge il PHP moderno.

Nel 2009 nasce il PHP-FIG, un gruppo di progetti che definisce standard comuni: le PSR, come PSR-4 per l'autoloading o PSR-7 per i messaggi HTTP. Nel 2012 arriva Composer, il gestore di dipendenze che finalmente dà a PHP quello che npm stava dando a JavaScript. Nel 2011 Taylor Otwell pubblica la prima versione di Laravel.

È il momento in cui PHP smette di essere "file sparsi caricati via FTP" e diventa un ecosistema di pacchetti riutilizzabili, testabili e versionati.

La sfida di Facebook: HipHop e HHVM

Facebook, cresciuto a dismisura su PHP, aveva un problema di costi: servivano troppi server. La risposta fu HipHop (2010), un compilatore da PHP a C++, poi sostituito da HHVM, una macchina virtuale con compilazione just-in-time. Da HHVM nacque anche Hack, un dialetto di PHP con tipizzazione graduale.

HHVM era molto più veloce del PHP ufficiale. E questa concorrenza fu una sveglia per la comunità.

2015: PHP 7 e la rinascita

La risposta arrivò da un branch sperimentale chiamato PHPNG (Next Generation), guidato da Dmitry Stogov, che riscrisse le strutture dati interne dello Zend Engine per usare meno memoria e meno allocazioni. Diventò PHP 7, rilasciato nel dicembre 2015.

Le prestazioni su applicazioni reali come WordPress risultarono in molti casi circa doppie rispetto a PHP 5.6. Ma PHP 7 non fu solo velocità: arrivarono le dichiarazioni di tipo scalari, i tipi di ritorno, la modalità strict_types, l'operatore null coalescing ??. Con PHP 7.4 (2019) si aggiunsero le proprietà tipizzate e le arrow function.

Da quel momento il vantaggio di HHVM si ridusse, e l'ecosistema PHP (Laravel, Symfony, WordPress) rimase sul motore ufficiale.

2020 in poi: PHP 8 e un linguaggio che si prende sul serio

PHP 8.0, del novembre 2020, ha cambiato il modo di scrivere PHP: compilatore JIT, union types, named arguments, attributes nativi al posto delle annotazioni nei commenti, l'espressione match, l'operatore nullsafe ?->, la promozione delle proprietà nel costruttore.

Le versioni successive hanno continuato su questa strada:

  • PHP 8.1 (2021): enum nativi, proprietà readonly, Fibers per la concorrenza cooperativa.
  • PHP 8.2 (2022): classi readonly, tipi DNF.
  • PHP 8.3 (2023): costanti di classe tipizzate, attributo #[\Override].
  • PHP 8.4 (2024): property hooks e visibilità asimmetrica, che eliminano gran parte dei getter e setter scritti a mano.
  • PHP 8.5 (2025): l'operatore pipe |> per concatenare trasformazioni in modo leggibile.

Il codice PHP di oggi, con DTO readonly, enum, tipi ovunque e analisi statica con PHPStan o Psalm, ha poco a che vedere con gli script mescolati all'HTML degli anni Duemila.

La PHP Foundation

Per anni lo sviluppo del linguaggio è dipeso da pochi contributori chiave, spesso pagati da singole aziende. Quando nel 2021 Nikita Popov, uno dei core developer più produttivi, annunciò di spostarsi su altri progetti, il rischio divenne evidente. Nel novembre 2021 JetBrains e altre aziende della comunità fondarono la PHP Foundation, un'organizzazione no-profit che finanzia sviluppatori a tempo pieno sul core. È la garanzia di continuità che mancava.

Cosa ci insegna la storia di PHP

PHP non ha vinto perché era il linguaggio più elegante. Ha vinto perché era il più accessibile: gratuito, preinstallato ovunque, immediato. Poi ha fatto una cosa rara: è maturato senza abbandonare la propria base di utenti, aggiungendo tipi, performance e strumenti moderni versione dopo versione.

Chi oggi parla di PHP con i pregiudizi del 2005 sta descrivendo un linguaggio che non esiste più. Nel prossimo capitolo della serie parliamo di un linguaggio nato con obiettivi opposti, progettato fin dall'inizio da un'azienda con una visione precisa: Java.

Hai lo stesso problema in azienda?

Raccontami cosa non va e da quando. Guardo la situazione con te prima di proporre qualsiasi intervento.

RaccontameloRispondo entro un giorno lavorativo.
Condividi:LinkedIn

Ricevi il prossimo articolo

Una mail per ogni articolo nuovo, nient'altro. Ti disiscrivi con un clic dal link in fondo a ogni email.