Categorie
News

PHP 8.1: funzioni e novità che devi conoscere

In questo articolo, descriveremo le novità essenziali del nuovo PHP 8.1 e le nuove possibilità che apriranno per gli sviluppatori (back-end developers) che lavorano con questa tecnologia, nonché per i proprietari dei siti web e delle applicazioni che usano questo linguaggio (PHP-based projects).

Il PHP (Hypertext Preprocessor) è il linguaggio di programmazione che troviamo a fondamento dei più comuni sistemi di gestione contenuti del web (WordPress, Drupal, Joomla, Magento, …), nonché di svariati framework per la creazione di applicazioni web (Laminas, Laravel, Symfony, CodeIgniter…).

Dopo 26 anni di vita (la prima versione del PHP fu scritta da Rasmus Lerdorf, programmatore danese-canadese nel lontano 1994!), il PHP continua a rinnovarsi ed essere uno degli standard imprescindibili nello sviluppo web.

Il più recente upgrade del PHP è attualmente in fase di sviluppo e verrà distribuito ufficialmente il 25 novembre 2021, data prevista per il rilascio della versione General Availability (GA), ossia quella ritenuta stabile, che segue una lunga serie di versioni preliminari (alpha, beta, e Release Candidate), come possiamo leggere nella pagina Todo (le “cose da fare”) del Wiki di PHP.

JIT (Just In Time Compiler)

Va bene, abbiamo un po’ “barato”. Il JIT è stato introdotto nella versione 8.0 del PHP, e in realtà nella 8.1 ci saranno al massimo dei bugfix (correzioni) di importanza minore.

Parlare della serie PHP 8.x però senza accennare a quella che è stata la più grande rivoluzione di questo linguaggio negli ultimi anni, sarebbe praticamente impossibile. Di cosa stiamo parlando?

Quando diciamo JIT, ci riferiamo al compilatore Just-in-time (JIT)

PHP JIT è implementato come una parte quasi indipendente della memoria condivisa OPcache (su cui torneremo tra qualche riga). Può essere abilitato o disabilitato in fase di compilazione dei programmi (script) in PHP e anche in fase di esecuzione. 

Quando è abilitato, il codice sorgente dei file PHP viene archiviato in una regione aggiuntiva dell’OPcache. Quindi, come siamo arrivati ​​a JIT e qual è la differenza tra JIT e OPcache?

Prima di tutto, teniamo presente che l’esecuzione di PHP è un processo in 4 fasi:

  • Lexing/Tokenizzazione: in primo luogo, l’interprete legge il codice PHP e crea un set di oggetti derivati detti token.
  • Parsing: l’interprete verifica se lo script corrisponde alle regole di sintassi del linguaggio e utilizza i token per costruire un Abstract Syntax Tree (AST), una rappresentazione gerarchica della struttura del codice sorgente.
  • Compilazione: l’interprete attraversa l’albero e traduce i nodi (cioè le foglie dell’albero gerarchico AST) in codici operativi (opcode) di basso livello, vale a dire identificatori numerici che determinano il tipo di istruzione.
  • Interpretazione: gli opcode vengono interpretati ed eseguiti sulla Zend Virtual Machine (VM).

Ora, gli opcode a cui abbiamo accennato sono rappresentazioni intermedie di basso livello, ma devono comunque essere compilati in codice macchina, comprensibile dal processore (CPU). Il JIT non introduce alcun modulo IR (Intermediate Representation) aggiuntivo, ma al contrario utilizza il DynASM (Dynamic Assembler for code generation engines) per generare codice sorgente direttamente dagli opcode PHP. 

In pratica, quello che fa il JIT è bypassare la compilazione, permettendo di eseguire il codice direttamente dalla CPU e senza dover passare per la Zend Virtual Machine, apportando notevoli miglioramenti alle prestazioni e all’utilizzo della memoria, come ha sostenuto Zeev Surasky, coautore della proposta originaria.

Al momento i benefici per le “app utente” come WordPress saranno limitati, ma il vero scopo finale del JIT è aumentare il potenziale utilizzo di PHP 8.1: portarlo a delle capacità di calcolo a “basso livello” che lo avvicinano a linguaggi come il C

Quest’ultimo – nonostante sia estremamente più complesso da utilizzare e a fronte dei suoi 49 anni sulle spalle! – resta una scelta quasi obbligata quando la velocità di computazione è il fulcro del progetto.

Novità PHP 8.1: Fibers

Le fibers, note anche come thread verdi, sono un meccanismo di basso livello per gestire il parallelismo delle operazioni. Per la maggior parte della storia del PHP, i programmatori hanno scritto codice di tipo sincrono: l’esecuzione delle funzioni (anche dette procedure) si interrompe finché non è disponibile un risultato da restituire, anche per le operazioni di I/O (Input / Output), che possono essere piuttosto lente.

Più recentemente, ci sono stati più progetti che hanno permesso di scrivere codice PHP asincrono per consentire operazioni di I/O simultanee, cioè dove l’esecuzione può continuare senza dover attendere un risultato da uno “step” precedente.

Le fibers sono uno di questi progetti, e anche se probabilmente non saranno utilizzate direttamente nei progetti “per gli utenti”, nondimeno verranno adottate da apposite librerie come Guzzle, ReactPHP e Amphp, che sono quelle effettivamente utilizzate dagli sviluppatori.

Novità PHP 8.1: Inheritance Cache

La cache del PHP (opcache) – che permette di avere a disposizione in una “memoria veloce” alcuni file, in modo da non doverli rileggere da capo ad ogni esecuzione del codice – è stata migliorata da Dmitry Stogov, uno dei principali core developers che lavorano al PHP, con un meccanismo di caching dell’ereditarietà

Grazie alla sua nuova creazione, quando nei nostri programmi andremo a dichiarare delle classi (che sono uno dei concetti fondamentali della cosiddetta programmazione ad oggetti) e queste classi “ereditano” caratteristiche da altri classi ancora (rapporto genitore-figlio), l’esistenza di questo legame sarà “memorizzabile”. Questa modifica si aggiunge alla possibilità di pre-caricamento della classi già introdotta nelle funzioni di PHP 7.4.

L’esito finale è lo stesso che ci aspettiamo anche dalle fibers: siti ed applicazioni più veloci per gli utilizzatori finali.

Nuove funzioni PHP 8.1: Intersection Types

Ora, per i nostri lettori più “smanettoni”, dato che stiamo parlando di un linguaggio di programmazione, entriamo nel merito di una modifica che riguarda direttamente il modo di scrivere codice, introdotta tra le novità della versione 8.1: il supporto per i tipi di intersezione

Per comprenderne meglio l’utilizzo, teniamo prima di tutto presente che è possibile aggiungere delle dichiarazioni di tipo agli argomenti delle nostre funzioni, cioè a quei parametri variabili che “diamo in pasto” alle nostro codice, così come ai valori che queste procedure ci restituiscono.

Questa assegnazione, anche detta type hinting (“suggerimento di tipo”), garantisce che il valore sia del tipo corretto (data / stringa di testo / numero intero / numero decimale / classe o interfaccia di tipo “chissà”) al momento della chiamata. 

Se però questo requisito non viene soddisfatto e ci troviamo ad esempio del testo quando ci aspettiamo una data, ecco che grazie al type hinting viene generato subito un errore della categoria TypeError. A sua volta, questo ci aiuta a eseguire meglio il debug del codice, vale a dire ad individuare insidiosi errori che potrebbero ritorcersi contro di noi a lungo termine. 

Tuttavia, dichiarare un singolo tipo ha i suoi limiti, e i tipi di unione (introdotti dal PHP 8.0) ci aiutano a superare questo problema consentendo di dichiarare un valore con più tipi: l’input dovrà soddisfarne almeno uno.  

Ora nel PHP 8.1, avremo anche i tipi di intersezione che invece richiedono necessariamente di soddisfare più di un requisito. Il caso classico è quello di classi che implementano più interfacce. 
Per fare un esempio molto generico, nel nostro software potrebbe esserci una classe “Asus”, che implementa (cioè va a realizzare concretamente) non uno ma due modelli astratti diversi (le cosiddette interfacce), ossia “Telefono”, dove la funzionalità fondamentale è quella di chiamare, e “OggettoCool”, che invece dovrà avere una natura di tutt’altro tipo, con un suo sistema operativo e tutto quello che ci aspettiamo da uno smartphone moderno.

PHP 8.1: Come possiamo esserti d’aiuto

Sappiamo quanto sia importante specialmente nel nostro settore essere sempre all’avanguardia sotto ogni aspetto, per cui supportiamo già il PHP 8.0, e il 25 novembre 2021 non ci faremo di certo trovare impreparati per la versione PHP 8.1! 

Anzi, saremo tra i primi ad averla a disposizione, pronta all’uso, per tutte le agenzie a cui forniamo servizi e che la desiderano.

L’infrastruttura di Hosting 4 Agency inoltre – per quanto concerne il PHP – ci permette con pochi click di far convivere sullo stesso server qualsiasi versione del PHP che desideriamo avere e di assegnarla a tutta una zona di risorse, che corrisponde ad una cartella. 

Qualsiasi sito o applicazione sottostante a quel punto del filesystem “girerà” (come diciamo in gergo) con il PHP desiderato. 

Se anche tu gestisci uno o più siti web e vuoi essere sicuro che siano sempre protetti, veloci e aggiornati prontamente alle soluzioni più innovative, possiamo occuparcene noi al posto tuo, sollevandoti da ogni tipo di preoccupazione e perdita di tempo.
Per saperne di più, dai un’occhiata ai vantaggi dei nostri servizi.