PHP 7: andiamo, è tempo di migrare!

Negli ultimi anni, le versioni minori di PHP hanno migliorato in modo significativo le performance di questo linguaggio. La community PHP è diventata più professionale e ha messo a disposizione degli sviluppatori numerosi strumenti per migliorare l'utilizzo del linguaggio e la gestione delle loro applicazioni. Il rilascio di PHP 7, successore di PHP 5, è previsto per il 12 novembre ed è annunciato come un grande evento.

Leggi questo articolo per conoscere funzionalità e opportunità che offre la nuova versione di PHP 7.

PHP, da 5 a 7: un errore passeggero

Gli informatici vogliono prendere in giro i matematici?

Dopo Microsoft, che passa da Windows 8 a Windows 10, anche PHP decide di non seguire le regole base dell'aritmetica: dopo PHP 5, ecco la versione 7. Perché? Facciamo un piccolo passo indietro. Nel 2004, dopo il rilascio di PHP 5, inizia il progetto della versione 6. L’obiettivo principale è di integrare Unicode al linguaggio, per standardizzare i caratteri speciali.
Per farla semplice: senza Unicode, non si può scrivere: "I ❤ PHP".

Nel 2010, decisioni sbagliate e mancanza di motivazione portano gli sviluppatori PHP ad abbandonare il progetto della nuova versione. Le spiegazioni tecniche di questa scelta sono chiarite in questa presentazione di Andrei Zmievski. Gli sviluppatori si sono quindi concentrati sui miglioramenti più pragmatici e, fino al 2014, li hanno integrati alle versioni minori.

Quando è arrivato il momento di lavorare alla roadmap della versione superiore successiva, è sorto subito il problema del nome da assegnare (leggi qui la discussione). Nel frattempo, infatti, erano già usciti articoli e libri sulla versione 6: da una parte, c'era il rischio di confusione per chi cercava la documentazione relativa all'ultima versione PHP; dall'altra, la comunità voleva chiudere definitivamente il capitolo di questa disavventura. Gli sviluppatori hanno quindi optato per il nome PHP 7.

La nuova versione di PHP è il risultato di oltre un anno e mezzo di lavoro. È quindi difficile essere esaustivi su tutte le innovazioni apportate: concentriamoci sulle più importanti.

PHP 7: due volte più veloce di PHP 5.6

La concorrenza spesso è una cosa positiva. Per le proprie necessità, Facebook ha creato, nel 2011, una piattaforma di runtime di PHP (chiamata HHVM), che migliora le performance del linguaggio grazie a un sistema di compilazione "in tempo reale" (JIT).

La comunità di sviluppatori ha subito colto l'opportunità e ha cercato di integrare i miglioramenti direttamente su PHP. Raggruppate sotto il nome PHPNG (PHP New Generation), queste ottimizzazioni, che hanno richiesto un importante code refactoring, hanno aperto la strada all'integrazione di un meccanismo di JIT, migliorando le prestazioni generali del linguaggio: in condizioni reali, PHP 7 è quasi due volte più veloce di PHP 5.

Basandoci sul benchmark realizzato da Rasmus Lerdorf (il creatore di PHP), possiamo affermare che PHP 7 ha raggiunto nell'aprile scorso lo stesso livello di performance di HHVM... i cui sviluppatori si sono poi rimessi all'opera per riconquistare il loro vantaggio!

Alcuni blog hanno subito paragonato la nuova versione di PHP a PHPNG. In realtà PHPNG, il cui impatto è tutt'altro che trascurabile, rappresenta solo una parte del lavoro realizzato.

Test realizzati con un'offerta di Hosting Web Performance 1. Misura di tempo in secondi.

Da PHP 5 a PHP 7: o la va o la spacca!

L’arrivo di PHP 7 comporterà necessariamente l'abbandono di alcune funzionalità definite "deprecated" nelle altre versioni. Molte estensioni non mantenute sono state eliminate, tra cui ereg_* e mysql, sostituita idealmente dall'estensione PDO_mysql (è disponibile anche mysqli).

Se utilizzi estensioni non mantenute da PHP, come i connettori a database specifici, verificane la compatibilità con PHP 7. PHPNG ha modificato il funzionamento interno delle estensioni, che devono essere aggiornate per funzionare con PHP 7, come accade per il driver verso MongoDB per cui è già disponibile un prototipo.

Sempre in un'ottica di miglioramento delle performance, PHP utilizza adesso un "abstract syntax tree" (AST) che permette di ottimizzare il codice "al volo". Tuttavia, questo impone che il metodo di lettura del contenuto sia uniforme. Con PHP 5, il compilatore legge generalmente da sinistra a destra, tranne alcuni casi in cui le variabili vengono lette da destra a sinistra. Queste eccezioni non esistono più con PHP 7, in cui tutto il codice viene letto da sinistra a destra.

Prendiamo ad esempio la variabile "$foo->$bar['baz']". Con PHP 5, l'interpretazione potrebbe essere "$foo->{$bar['baz']}", mentre con PHP 7, ad essere interpretato sarà innanzi tutto $foo->$bar. In PHP 7, l'interpretazione potrebbe essere "($foo->$bar)['baz']". Questo cambiamento non dovrebbe avere nessun impatto importante sulle tue applicazioni, ma non stupirti se con questo tipo di sintassi risultano errori.

Un altro cambiamento importante, ed è una buona notizia, gli "errori fatali" mostrati dal linguaggio sono restuiti ora in eccezioni. Questo significa che adesso questi errori possono essere trattati direttamente nell'applicazione, evitando così l'esecuzione del comportamento di default di PHP. Chi ha avuto a che fare con questo tipo di errori sa perfettamente di cosa parlo!

Infine, il linguaggio PHP comporta nuove parole riservate. Attenzione quindi: per rinominare le tue classi, namespace o traits non puoi più utilizzare le parole int, foat, bool, string, true, false, null, resource, object, scalar, mixed e numeric. I numerosi framework PHP hanno wrapper attorno ad alcuni tipi di dati, come le stringhe di caratteri (string) e devono adattarsi.

I punti descritti non rappresentano tutte le interruzioni di compatibilità ascendente relative a PHP 5.6, ma quelli principali. L'elenco completo è disponibile sul sito PHP (http://php.net/manual/en/migration70.php). E, anche se avete preso tutte le precauzioni del caso, nulla può sostituire un test in condizioni reali, ad esempio sulla tua infrastruttura di pre-produzione. Inoltre, se vuoi testare rapidamente la tua applicazione PHP, le nostre offerte condivise ti permettono già di provare le versioni beta di PHP 7!

Evita l'errore fatale, grazie alla tipizzazione dei parametri scalari

L'elenco delle nuove funzionalità di PHP 7 è lungo. E c'è quanto serve per rispondere a chi sostiene che PHP sia pericoloso a causa della sua tipizzazione dinamica. Perché, per la prima volta nella sua storia, PHP integra la tipizzazione statica delle variabili.

Immagino già le reazioni di coloro che stanno pensando all'impatto sul codice esistente. Rassicuratevi: sono funzionalità opzionali, disponibili solo quando la tipizzazione viene richiesta esplicitamente. Immagino anche la reazione di coloro che sostengono che questo non serve a niente. Non è vero! L'utilizzo delle variabili statiche consente al compilatore PHP di eseguire ottimizzazioni impensabili senza conoscere preventivamente la tipizzazione della variabile. Inoltre, se cerchi la migliore struttura di dati, esiste una conferenza di Patrick Allaert molto utile sull'argomento. Ma quali sono le novità relative alla tipizzazione dei dati?

In realtà le novità sono due: le "scalar type declarations" e le "return type declarations". La prima è la definizione del tipo atteso negli argomenti di una funzione. Se il valore atteso dalla funzione è formattato correttamente, il linguaggio restituisce un'eccezione. Ad esempio, per definire una funzione che permette di dividere due numeri interi, puoi scriverla come in questo esempio:

Codice:

Risultato:

La funzionalità "return type declarations" consente invece di dichiarare il formato atteso in uscita dalla tua funzione. Come prima, otterrai un'eccezione se la tua funzione restituisce un valore sbagliato.

Codice:

Risultato:

I puristi della tipizzazione statica sosterranno che la possibilità di fornire una stringa di caratteri che contiene un numero intero dovrebbe restituire un errore. e saranno probabilmente delusi da queste nuove funzionalità... Ma, ancora una volta, PHP 7 permette agli sviluppatori di definire il suo livello di rogire! Così, aggiungendo la stringa "declare(strict_types=1) ;" all'inizio del file, PHP restituirà un'eccezione anche in questo caso. Questo funziona per la tipizzazione di ritorno di una funzione, maa anche per quello di questi argomenti!

Codice:

Risultato:

Con le nuove funzionalità che permettono al compilatore di ottimizzare il funzionamento del linguaggio, sarebbe un peccato andare oltre. Naturalmente non c'è bisogno di riscrivere tutto il codice per passare alla versione 7, perché la tipizzazione dinamica fa parte di questa versione. E poi ci sono alcuni casi in cui il suo utilizzo è ancora pratico.
Dimenticavo: PHP 7 supporta al momento i caratteri Unicode all'interno delle stringhe. Ereditato dal progetto interrotto PHP6, questa innovazione fa entrare PHP nell'era dei piccoli 🐈.

CMS e Framework: siete pronti?

Molto sviluppatori utilizzano i CMS o i framework per concentrasi meglio sulle problematiche della loro professione. Per migrare a PHP 7 e approfittare delle sue nuove funzionalità, dovranno aspettare che questi framework vengano aggiornati. Non ci vorrà molto tempo, perché PHP 7 non includerà nuove funzionalità rispetto alla versione beta rilasciata all'inizio di luglio, su cui si sono basati i team che mantengono i principali CMS e Framework.

Alcuni team hanno annunciato anche di essere già pronti a passare a PHP 7! Tra questi, quelli di Symfony, pronti da agosto sulle versioni 2.3, 2.6, 2.7 e la futura 3.0, così come il team di Zend Framework, pronto dalla versione 2.4+, o ancora il team di WordPress, compatibile dalla versione 4.3 rilasciato in agosto.

Gli altri sono negli starting-block:
• Con Drupal PHP 7 verrà supportato dalla versione 8, il cui rilascio è imminente (il secondo release candidato è uscito il 21 ottobre;
• La versione attuale di Joomla! non supporta PHP 7 (merci la classe String), ma la versione 3.5 sarà compatibile;
• PrestaShop non ha fatto annunci relativamente a PHP 7, mais la versione 1.6.1.2, di cui il quarto release candidato è uscito da pochi giorni, si installa correttemente con PHP7.

Il 2015 sarà probabilmente un anno di svolta per il linguaggio PHP, dato che l'incremento delle prestazioni apportate nella versione 7 lo rendono molto competitivo in termini di velocità rispetto a molti linguaggi. PHP 7 PHP 7 integra anche funzionalità attese da molti sviluppatori. Ma, a differenza della migrazione da PHP 4 a PHP 5, le interruzioni nel linguaggio non hanno un grande impatto e la migrazione non ha bisogno di rivedere le tue applicazioni dalla A alla Z! Quindi, potrebbe già essere il momento di prendere in considerazione la migrazione...