PHP, noto come Hypertext Preprocessor, è un linguaggio di scripting lato server. Viene utilizzato principalmente per lo sviluppo web ed è stato rilasciato per la prima volta nel 1995 da Rasmus Lerdorf. Da allora, PHP ha visto un gran numero di versioni, ognuna con miglioramenti e modifiche significativi. Diamo uno sguardo all'evoluzione di PHP dalla sua nascita fino a PHP 8, l'ultima versione conosciuta a settembre 2021.
Versioni di PHP e modifiche principali
PHP/FI (Personal Home Page / Forms Interpreter) 1.0 (Rilasciato nel 1995)
La prima versione di PHP, allora nota come PHP/FI, fu sviluppata da Rasmus Lerdorf. All'epoca, PHP era un semplice insieme di script CGI in Perl che aiutavano Lerdorf a gestire il suo curriculum personale e a raccogliere alcuni dati. Fu solo quando Lerdorf combinò questi script con il linguaggio C per creare PHP/FI che PHP divenne un prodotto utilizzabile da altri.
PHP/FI 2.0 (rilasciato nel 1997)
La versione 2 di PHP/FI ha introdotto una serie di funzionalità che hanno gettato le basi per quello che PHP sarebbe diventato in futuro. Tra queste funzionalità figuravano il supporto per i moduli e i cookie, nonché la possibilità di incorporare codice PHP direttamente nell'HTML.
PHP 3 (rilasciato nell'anno 1998)
Sviluppato da Andi Gutmans e Zeev Suraski, PHP 3 ha rappresentato una completa revisione del linguaggio, definendo la maggior parte delle convenzioni sintattiche che conosciamo oggi. Ha introdotto per la prima volta il supporto per gli oggetti ed è stata la prima versione ad assumere la forma di un linguaggio di programmazione completo.
PHP 4 (rilasciato nell'anno 2000)
La versione 4 di PHP ha introdotto il motore Zend, un software che interpreta il codice PHP. Ciò ha portato a un miglioramento delle prestazioni, nonché a un supporto migliore per la programmazione orientata agli oggetti. Includeva anche funzionalità come la persistenza della sessione e il buffering dell'output.
PHP5
PHP 5 ha introdotto miglioramenti significativi alla programmazione orientata agli oggetti, con l'aggiunta di classi astratte, interfacce, clonazione di oggetti ed eccezioni. Inoltre, è stato migliorato il supporto per XML ed è stato introdotto il supporto per SQLite.
PHP 5.0 (rilasciato a luglio 2004)
- Miglioramenti nella programmazione orientata agli oggetti È stato introdotto un modello a oggetti completo, comprensivo di modificatori di accesso, interfacce, clonazione ed eccezioni.
- Gestione XML migliorata Aggiunta l'estensione SimpleXML per una gestione più semplice dei file XML.
- SQLite: SQLite, un motore di database SQL leggero, è stato incluso in PHP per impostazione predefinita.
PHP 5.1 (rilasciato nel novembre 2005)
- Supporto per PDO (PHP Data Objects): Fornisce un'interfaccia per accedere ai database in PHP.
- Miglioramenti delle prestazioni Include l'aggiunta di un garbage collector per terminare i cicli di riferimento.
PHP 5.2 (rilasciato nel novembre 2006)
- Introduzione di filter_list() Aiuta a convalidare e filtrare i dati in modo sicuro.
- Miglioramenti delle prestazioni e della stabilità Include l'aggiornamento della libreria PCRE, che presenta una migliore compatibilità e prestazioni superiori.
PHP 5.3 (rilasciato a giugno 2009)
- Spazi dei nomi Permettono di organizzare meglio il codice in pacchetti.
- Legami statici tardivi Migliora l'ereditarietà del codice in PHP.
- Chiusure (funzioni anonime) : Ora è possibile creare funzioni senza un nome specifico.
- Miglioramenti nella gestione delle eccezioni Viene introdotta la possibilità di utilizzare più eccezioni catch.
- Supporto per la sintassi ternaria annidata senza bisogno di parentesi.
PHP 5.4 (rilasciato a marzo 2012)
- Caratteristiche Consente il riutilizzo del codice nei linguaggi di programmazione a singolo antenato, una sorta di ereditarietà multipla.
- Sintassi degli array brevi : Ora è possibile dichiarare gli array con le parentesi quadre [] invece di utilizzare la funzione array().
- Gestione della memoria migliorata Riduce l'utilizzo complessivo della memoria.
PHP 5.5 (rilasciato a giugno 2013)
- Generatori Consente la facile creazione di iteratori senza la necessità di implementare l'interfaccia iteratore.
- Infine, parola chiave : Aiuta a garantire che un segmento di codice venga sempre eseguito, indipendentemente dal fatto che venga generata un'eccezione.
- Supporto per le liste in foreach.
PHP 5.6 (rilasciato nell'agosto 2014)
- Analisi degli argomenti Consente di utilizzare ... per estrarre gli argomenti da un array o da un oggetto Traversable.
- Utilizzare la funzione e utilizzare la costante : Importa funzioni e costanti in uno spazio dei nomi.
- Miglioramenti delle GMP Consente l'utilizzo di numeri GMP in funzioni che accettano numeri interi o stringhe.
- Miglioramenti della sicurezza È stato aggiunto il supporto per i certificati di firma a chiave pubblica.
PHP 7 (rilasciato nel 2015)
Con PHP 7, si è registrato un enorme miglioramento delle prestazioni grazie all'introduzione del motore di esecuzione Just In Time (JIT). Tra le funzionalità aggiuntive figurano i tipi di ritorno, la dichiarazione di tipi scalari, l'operatore di unione null e la possibilità di definire array costanti tramite la funzione define().
PHP 7.0 (rilasciato a dicembre 2015)
- Miglioramento delle prestazioni Il nuovo motore PHPNG (Zend Engine 3) migliora le prestazioni, riduce l'utilizzo della memoria e semplifica la gestione degli errori.
- Dichiarazioni del tipo di ritorno Questa funzionalità consente di specificare il tipo di valore che una funzione deve restituire.
- Dichiarazioni di tipo scalare Consente di forzare il tipo dei parametri nelle funzioni (int, float, stringa, booleano).
- Operatore di fusione nulla (??) : Questo operatore semplifica il controllo dei valori nulli.
- Operatore di navicella spaziale (<=>) : Introdotto per facilitare il confronto tra due espressioni.
PHP 7.1 (rilasciato a dicembre 2016)
- tipi nullabili È consentito indicare che il valore restituito da una funzione può essere di un tipo specifico o nullo.
- Funzioni vuote Il tipo void viene introdotto per le funzioni che non restituiscono alcun valore.
- visibilità costante della classe Ora è possibile definire le costanti di classe come pubbliche, private o protette.
- Pseudotipo iterabile Inserire il tipo iterabile per i parametri e i tipi di ritorno delle funzioni.
PHP 7.2 (rilasciato a novembre 2017)
- Libsodium Questa libreria per la crittografia moderna e sicura è ora inclusa di default.
- Miglioramenti di tipo : Aggiunto il tipo "object" e consentito l'uso di tipi astratti nelle dichiarazioni dei tipi di parametro e di ritorno.
PHP 7.3 (rilasciato a dicembre 2018)
- Virgole finali nelle chiamate di funzione : Nelle chiamate di funzione sono consentite le virgole finali.
- miglioramento della velocità del codice JSON Le prestazioni delle funzioni json_encode() e json_decode() sono state migliorate.
- miglioramenti GC Introduce miglioramenti al garbage collector, con conseguente riduzione del consumo di memoria.
PHP 7.4 (rilasciato a novembre 2019)
- Funzioni freccia Questa funzionalità consente la creazione di funzioni anonime in modo più conciso.
- Proprietà tipizzate : Le proprietà di classe ora possono avere tipi dichiarati.
- Decompressione all'interno degli array Questa funzionalità consente di estrarre array da altri array.
- Riferimenti deboli Consente di conservare i riferimenti agli oggetti senza impedirne la distruzione da parte del garbage collector.
PHP 8 (rilasciato nel 2020)
La versione 8 di PHP ha introdotto numerose nuove ed entusiasmanti funzionalità, come la compilazione Just-In-Time (JIT), che migliora ulteriormente le prestazioni. Sono stati inoltre aggiunti, tra le tante altre, i tipi di dati Union, le espressioni di corrispondenza, l'operatore nullsafe, gli argomenti denominati e gli attributi.
Bene, e dov'è la versione 6?
La versione PHP 6 esisteva effettivamente come progetto, ma non è mai stato rilasciato ufficialmente L'obiettivo principale di PHP 6 era quello di fornire supporto nativo per Unicode, uno standard che consente l'elaborazione del testo in qualsiasi lingua del mondo.
Tuttavia, gli sviluppatori si sono imbattuti in una serie di problemi durante lo sviluppo Implementare il supporto completo per Unicode nel core di PHP si è rivelato molto più complesso del previsto. Inoltre, le prestazioni della versione di anteprima di PHP 6 con Unicode erano significativamente più lente.
A causa di queste difficoltà e del ritardo nello sviluppo, il progetto PHP 6 fu infine abbandonato. Gli sviluppatori decisero di saltare il numero 6 nella denominazione della successiva versione principale di PHP per evitare confusione con il fallito progetto PHP 6. Pertanto, dopo PHP 5.6, la versione principale successiva fu PHP 7.0.
PHP 7 ha incorporato molte delle funzionalità previste per PHP 6, ma non ha incluso il supporto nativo per Unicode nel linguaggio di base. PHP 7 si è invece concentrato sul miglioramento delle prestazioni e sull'aggiunta di nuove funzionalità al linguaggio.
Parliamo di prestazioni: vale la pena fare l'aggiornamento?
L'evoluzione del linguaggio di programmazione non ha portato solo nuove funzionalità, ma ha anche posto particolare enfasi sul miglioramento delle prestazioni ad ogni versione:
- PHP/FI 2.0 - Basso Non era ottimizzato per le prestazioni, poiché l'attenzione principale era rivolta alle funzionalità dei moduli e all'interazione con i database.
- PHP 3 - Migliorato rispetto a PHP/FI 2.0. La riscrittura del motore PHP ha permesso un miglioramento delle prestazioni e dell'efficienza.
- PHP 4 - Prestazioni migliorate rispetto a PHP 3. L'introduzione del motore Zend ha ulteriormente migliorato le prestazioni.
- PHP 5.0 - Simile a PHP 4. Sebbene includesse miglioramenti significativi nella programmazione orientata agli oggetti e nel supporto XML, le prestazioni erano simili a quelle di PHP 4.
- PHP 5.1 - 5.6 - Migliorato a ogni versione minore, in particolare con ottimizzazioni delle prestazioni e miglioramenti alla gestione della memoria (garbage collection).
- PHP 7.0 - Notevolmente migliorato rispetto a PHP 5.X, grazie all'introduzione di Zend Engine 3. Le prestazioni di PHP 7.0 potrebbero essere doppie o triple rispetto a quelle di PHP 5.6 per molte applicazioni.
- PHP 7.1 - 7.4 - Ogni versione minore ha introdotto miglioramenti delle prestazioni, sebbene non così drastici come il passaggio da PHP 5.6 a PHP 7.0.
- PHP 8.0 - Miglioramenti rispetto a PHP 7.4. L'aggiunta della compilazione Just-In-Time (JIT) può migliorare le prestazioni in alcuni casi, sebbene il miglioramento potrebbe non essere significativo per le tipiche applicazioni web.
E la sicurezza? Cosa puoi dirmi?
PHP/FI 2.0 - PHP 3
- In queste prime versioni, la sicurezza non era una priorità e molte funzionalità di sicurezza non erano incluse.
PHP4
- PHP 4 ha introdotto la modalità sicura (safe_mode), pensata per prevenire alcuni tipi di attacchi, ma ritenuta inefficace e quindi deprecata e rimossa in PHP 5.4.
PHP5
PHP 5 ha introdotto una serie di miglioramenti alla sicurezza:
- Magic Quotes: Introdotto per prevenire gli attacchi di SQL injection, ma criticato per il suo comportamento incoerente, è stato infine disabilitato di default in PHP 5.3 e rimosso in PHP 5.4.
- Miglioramenti nella gestione degli errori: PHP 5 ha introdotto le eccezioni, che migliorano la gestione degli errori e possono contribuire a prevenire l'esposizione di informazioni sensibili.
- PDO (PHP Data Objects): Introdotto in PHP 5.1, fornisce un'interfaccia per l'accesso ai database che include query preparate, utili a prevenire le iniezioni SQL.
PHP 5.2
- Filtro di input: PHP 5.2 ha introdotto l'estensione filter che consente la validazione e il filtraggio dei dati di input in modo sicuro e coerente.
PHP 5.3
- PHAR (PHP Archive): PHP 5.3 ha introdotto il supporto per PHAR, un metodo per impacchettare intere applicazioni PHP in un singolo archivio. Sebbene non si tratti di un miglioramento della sicurezza in sé, PHAR include diverse misure di sicurezza per prevenire gli attacchi, come la possibilità di convalidare le firme digitali.
PHP 5.6
- Miglioramenti alla sicurezza SSL/TLS: PHP 5.6 ha introdotto il supporto per i certificati di firma a chiave pubblica e miglioramenti alle impostazioni SSL/TLS predefinite.
PHP 7
PHP 7 ha disabilitato o rimosso diverse funzioni e caratteristiche obsolete e potenzialmente insicure:
- Sono state rimosse diverse funzioni hash non sicure, come crypt() e hash().
- Deserializzazione automatica disabilitata per prevenire vulnerabilità di object injection.
- Sono state introdotte la dichiarazione del tipo e la dichiarazione del tipo di ritorno per contribuire a prevenire errori di tipo che potrebbero essere sfruttati.
PHP 7.2
- Miglioramento della sicurezza delle password: PHP 7.2 ha introdotto la funzione password_hash() con supporto per Argon2, un algoritmo di hashing delle password più sicuro.
PHP 8
PHP 8 non ha introdotto molte nuove funzionalità di sicurezza, ma ha continuato la tendenza di PHP 7 di rimuovere o disabilitare le funzionalità obsolete e potenzialmente insicure.
Conclusione
L'aggiornamento alla versione più recente di PHP spesso offre diversi vantaggi Innanzitutto, gli aggiornamenti spesso includono miglioramenti delle prestazioni , che può rendere le tue applicazioni web più veloci. In secondo luogo, le versioni più recenti spesso includono nuove funzionalità che possono rendere il codice più efficiente e più facile da scrivere e mantenere. In terzo luogo, le versioni più recenti di PHP spesso includono miglioramenti della sicurezza che possono proteggi la tua applicazione contro attacchi e vulnerabilità.
Tuttavia, è anche importante notare che l'aggiornamento a una nuova versione di PHP può portare sfide Il codice esistente potrebbe dover essere rivisto o ristrutturato per supportare nuove funzionalità o per evitare funzionalità che sono state disabilitate o rimosse. In entrambi i casi, l'aggiornamento di PHP è una parte essenziale del funzionamento di un applicazione web sicura e ad alte prestazioni .



