PHP 8: tutte le informazioni sulla nuova versione
PHP è un linguaggio di programmazione tra i più facili da imparare. Con un tutorial e la giusta motivazione, in poche ore si può già apprendere a scrivere i primi codici ed eseguire i primi comandi. PHP 7 ha portato con sé un’ottimizzazione della velocità influendo positivamente sul ranking nei motori di ricerca. Ora ilIl linguaggio open source ha ricevuto un importante aggiornamento alla versione 8.0, a cui è seguito dopo un anno un aggiornamento minore alla versione più recente, la 8.1.
Quali sono le caratteristiche di PHP 8.1?
PHP 8.1 è stato rilasciato in versione beta ed è attualmente in fase di test. L'aggiornamento finale arriverà a novembre 2021, ma le nuove caratteristiche sono già note. Ecco di quali novità si parla:
- Enum: le cosiddette Enumerations (enumerazioni con un certo numero di valori) sono ora disponibili come tipo di variabile.
- Fibers: la nuova tipologia di code block Fibers vi dà la possibilità di eseguire diversi thread di programma in parallelo.
- Arrays: a partire da PHP 7.4, è possibile scompattare gli array con valori numerici. Ora questo è possibile anche per gli array con stringhe.
- Readonly: d'ora in poi, le proprietà delle classi possono essere marcate come 'readonly' e quindi non sono più modificabili.
- Intersection: i tipi di intersezione (fondamentalmente le controparti dei tipi di unione) sono ora disponibili.
- Never: il nuovo valore di ritorno 'never' indica che una funzione è terminata e non restituisce nessun altro valore.
- Final: ora potete marcare le costanti di classe con 'final' in modo che non possano essere cambiate dalle sottoclassi.
- Fsync: PHP 8.1 introduce le due funzioni 'fsync' e 'fdatasync' per sincronizzare i dati dal buffer al supporto di memorizzazione.
- Octal: per visualizzare il sistema numerico ottale, oltre a '0' (zero), si potrà utilizzare anche il prefisso '0o' (zero e O minuscola).
- Globals: l'uso di '$GLOBALS' è stato leggermente limitato e ora porta in alcuni casi a un messaggio di errore.
- Null: le funzioni interne non accettano più valori nulli per argomenti non annullabili.
Questa è solo una selezione dei cambiamenti più interessanti in PHP 8.1. Molte delle altre nuove funzionalità pianificate possono essere trovate nel Wiki ufficiale con tutte le Request for Comments.
PHP 8: rilasciato a novembre 2020
Il 26 novembre 2020 è arrivato ed è stata rilasciata l’ultima versione del popolare linguaggio di scripting, PHP 8. È stata così confermata la durata del ciclo delle versioni PHP di tre anni. Il precedente PHP 7.4 è stato attivo circa un anno, prima che il supporto per PHP 7.1 venisse interrotto. Anche il supporto per PHP 7.2 è terminato alla fine del 2020.
Tuttavia, molti siti web scritti in linguaggio PHP continuano a utilizzare vecchie versioni, in quanto ancora possibile (anche se non consigliato). Mantenere aggiornato il codice alla base del sito web e passare alle nuove versioni di PHP offre diversi vantaggi: nuove funzioni significano più possibilità, la performance può migliorare notevolmente e le falle di sicurezza vengono chiuse.
Tuttavia, molti siti web scritti in linguaggio PHP continuano a utilizzare vecchie versioni, in quanto ancora possibile (anche se non consigliato). Mantenere aggiornato il codice alla base del sito web e passare alle nuove versioni di PHP offre diversi vantaggi: nuove funzioni significano più possibilità, la performance può migliorare notevolmente e le falle di sicurezza vengono chiuse.
Provate subito PHP 8! Non siete ancora clienti IONOS? Ordinate ora una delle vantaggiose offerte di web hosting. In questo modo avrete la possibilità di modificare la versione di PHP nelle impostazioni del vostro account IONOS e aggiornarla a PHP 8 o PHP 8.1 (non appena disponibile).
Utilizzare il codice non aggiornato comporta dei problemi?
Trattandosi PHP 8 di un aggiornamento principale, bisogna rendersi conto che il codice delle versioni precedenti potrebbe non essere più compatibile. La maggior parte delle modifiche che potrebbero causare problemi sono però già state apportate nelle versioni 7.2, 7.3 e 7.4.
Le modifiche attuali sono:
Le modifiche attuali sono:
- The real type
- Magic quotes legacy
- array_key_exists() with objects
- FILTER_SANITIZE_MAGIC_QUOTES filter
- Reflection export() methods
- mb_strrpos() with encoding as 3rd argument
- implode() parameter order mix
- Unbinding $this from non-static closures
- hebrevc() function
- convert_cyr_string() function
- money_format() function
- ezmlm_hash() function
- restore_include_path() function
- allow_url_include ini directive
Microsoft ha annunciato che l'azienda non offrirà più il supporto di Windows per PHP 8 e versioni successive. Tuttavia, gli sviluppatori di PHP hanno già annunciato la loro intenzione di colmare questa lacuna autonomamente.
Le nuove funzioni di PHP 8
La nuova versione di PHP ha portato con sé alcune novità che offrono molte possibilità aggiuntive agli sviluppatori web. Di seguito abbiamo riassunto per voi le modifiche più importanti rispetto alle versioni precedenti.
Il 30 novembre 2020 è stata la data ufficiale di End-of-Life di PHP 7.2, e non è più supportata da allora. Per saperne di più, vedi il nostro articolo su questo argomento.
JIT Compiler
La maggiore novità è il JIT Compiler, che dovrebbe migliorare notevolmente le prestazioni. PHP non viene compilato ma interpretato riga per riga. Il compilatore JIT (Just in Time) ha il compito di compilare parti del codice durante il tempo di esecuzione (runtime) e funziona in maniera molto simile a una versione cache del codice.
Anche Pedro Escudero ha già testato in maniera convincente questa nuova funzione di PHP 8. Ha utilizzato un semplice script e comparato le versioni 5.3, 7.4 e 8; quest’ultima con e senza JIT. A questo scopo ha eseguito lo script cento volte per ogni versione e registrato il tempo medio.
Nella seguente tabella abbiamo riportato i valori medi registrati:
Anche Pedro Escudero ha già testato in maniera convincente questa nuova funzione di PHP 8. Ha utilizzato un semplice script e comparato le versioni 5.3, 7.4 e 8; quest’ultima con e senza JIT. A questo scopo ha eseguito lo script cento volte per ogni versione e registrato il tempo medio.
Nella seguente tabella abbiamo riportato i valori medi registrati:
Versione PHP | Tempo in secondi |
---|---|
5.3 | 0.64574003219604 |
7.4 | 0.10253500938416 |
8 (senza JIT) | 0.098223924636841 |
8 (con JIT) | 0.053637981414795 |
Nonostante non vi sia una gran differenza tra la versione 7.4 e la 8 senza JIT, il discorso cambia con la versione 8 dotata di JIT. Il compilatore JIT assicura un miglioramento delle prestazioni di oltre il 45%.
Union Types
Gli Union Types (o tipi di unione) si conoscono già da altri linguaggi quali C/C++, TypeScript o anche Haskell. Questa funzione permette di autorizzare due o più tipi per unione rendendo possibile l’utilizzo di ognuno di questi. Il codice corrispondente si presenta così:
public function foo(Foo|Bar $input): int|float;
Tuttavia c’è una restrizione, in quanto void non può diventare parte di un Union Type dato che non restituisce alcun valore. Inoltre le unioni nullable possono essere scritte con |null o ?, come nel seguente esempio:
public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;
Static return type
Static è un nome di classi speciale e, nella nuova versione, fa parte dei Return Type validi assieme a self & parent.
WeakMap
I WeakRefs erano già stati aggiunti in PHP 7.4, ora con WeakMaps PHP 8 introduce l’estensione di questa funzione. WeakMaps e WeakRefs possono essere impiegati per cancellare oggetti, qualora solamente la cache faccia riferimento alle classi di entità degli oggetti. Questo porta a un risparmio di risorse nella gestione degli oggetti. Un esempio estratto dalla documentazione:
class FooBar {
private WeakMap $cache;
public function getSomethingWithCaching(object $obj) {
return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
}
// ...
}
Utilizzare ::class per gli oggetti
Nelle versioni precedenti era necessario utilizzare get_class() per assegnare gli oggetti a una classe. Ora invece è possibile utilizzare ::class per gli oggetti, lasciando il codice sorgente più leggero.
Stringable interface
La stringable interface viene aggiunta automaticamente alle classi che implementano il metodo __toString(). Finora questo passaggio andava eseguito manualmente. Il codice si presenta quindi nel modo seguente:
class Foo
{
public function __toString(): string
{
return 'foo';
}
}
function bar(Stringable $stringable) { /* … */ }
bar(new Foo());
bar('abc');
Funzione fdiv()
La nuova funzione fdiv() permette di dividere per 0. In risposta si ottengono i valori di ritorno INF, -INF o NAN.
Type errors (errori di tipo)
Finora solamente alcune funzioni definite dall’utente causavano TypeErrors, mentre con le funzioni interne si otteneva un avvertimento e null come risultato. A partire da PHP 8 anche le funzioni interne possono restituire errori di tipo.
Nuova classificazione di engine warnings
Finora ci sono stati molti errori a cui seguiva un avvertimento o un suggerimento. Ora anche questo è stato cambiato. Nella documentazione trovate un elenco completo di tutti i nuovi avvisi di errori PHP.
Firme corrette dei metodi magici
Nelle versioni precedenti di PHP, era possibile scrivere metodi magici con firme che non corrispondevano alla firma prevista, per esempio __clone(): float o __isset(): Closure. Dall’introduzione di PHP 7.0, l’uso corretto dei metodi magici è stato controllato solo in modo casuale. Alla nuova versione sono stati aggiunti vari controlli dei parametri e dei valori di ritorno per garantire la correttezza delle firme.
Reflection
Anche qui le firme della classe Reflection sono state modificate. Originariamente Reflection veniva scritto in questo modo:
ReflectionClass::newInstance($args);
ReflectionFunction::invoke($args);
ReflectionMethod::invoke($object, $args);
In PHP 8 è scritto ora nel seguente modo:
ReflectionClass::newInstance(...$args);
ReflectionFunction::invoke(...$args);
ReflectionMethod::invoke($object, ...$args);
Se si vogliono supportare PHP 7 e PHP 8 in contemporanea, allora è possibile utilizzare il codice seguente:
ReflectionClass::newInstance($arg = null, ...$args);
ReflectionFunction::invoke($arg = null, ...$args);
ReflectionMethod::invoke($object, $arg = null, ...$args);
Non avete ancora un vostro sito web? Web Hosting di IONOS è un servizio di hosting altamente performante e raccomandato anche per i principianti. Inoltre, optando per un server virtuale potete ottenere il più alto livello di flessibilità e le migliori prestazioni possibili. Scegliete l’offerta IONOS che meglio si adatta al vostro progetto.