PHP7: le principali novità per lo sviluppo di Servizi IT

Torna a Blog

Anche quest’anno il Team di developers della nostra Factory PHP impegnata nell’offerta di Servizi IT e Sviluppo Magento ha partecipato al Codemotion, l’appuntamento per gli appassionati di tecnologia e innovatori che punta a formare una nuova generazione di developers competitivi a livello globale.

Uno degli speech più seguito dai developers è stato ‘What to expetc from PHP 7’, tenuto da Lorna Mitchell sul linguaggio di programmazione finalmente disponibile dopo PHP 5.6. PHP 7 è il prodotto di uno sviluppo lungo e articolato che ha impegnato i programmatori per diversi anni.

Il tema tocca il lavoro dei nostri developers da vicino nell’ambito delle soluzioni realizzate in ambito Sviluppo IT ed e-Commerce. In quest’ultimo caso è importante ricordare che anche Magento, la tecnologia su cui Tecnolife è specializzata per la gamma di servizi e-commerce offerti alle aziende, è supportato dal linguaggio PHP. Nella versione 1 Magento sfrutta la versione 5.5.; Magento 2 invece, dalla versione più recente 2.0.1 in poi, supporterà il linguaggio PHP7.

I vantaggi di questa versione rispetto alla 5.6 sono diversi, e tutti significativi in termini di prestazione e innovazione. In assoluto, ancor prima delle novità a livello di programmazione, le migliorie riguardano le performance che risultano raddoppiate rispetto a PHP 5.6 ed hanno raggiunto quelle di HHVM, la HipHop Virtual Machine con la compilazione “Just-In-Time’’ utilizzata da Facebook. Al tempo stesso vengono ridotte le necessità in termini di memoria.

Tornando ai benefici apportati alla tecnologia Magento, PHP7 è dunque meno esigente lato hardware.

 

Fonte: Serverplan

Per avere un’idea delle qualità espresse da PHP7 c’è questa infografica creata da Zend.com. Il team di ricerca ha testato su diverse applicazioni web PHP7, confrontandolo con la versione 5.6 e con HHVM 3.7. In questo caso Magento offre un’esecuzione più rapida e pretende il 30% in meno di memoria. Questo vuol dire che è possibile sfruttare le risorse dei server per soddisfare altre richieste, soprattutto nei momenti di picco e di maggior traffico.

Le principali novità di PHP 7

La prima novità riguarda l’introduzione dell’operatore spaceship “<=>” che permette il confronto tra due variabili che siano interi, decimali o stringhe. A seconda dei valori delle variabili, il confronto restituisce 0 se i due elementi sono uguali, 1 se il primo elemento è maggiore al secondo e -1 se il secondo elemento è maggiore al primo. Questo permette di semplificare il confronto fra variabili utilizzando un unico comando.

Altra novità è il Null Coalesce Operator “??” che funziona come il “ternary shortand” di PHP5 con la verifica ulteriore dell’esistenza della variabile come si farebbe utilizzando il vecchio comando “isset”.

Di seguito un esempio:

PHP5 : $var = (isset($a) ? $a : ‘default’)
PHP7 : $var = ($a ?? ‘default’)

Con questo nuovo operatore è facile pensare ad una concatenazione di eventi che dipendano dal precedente come ad esempio $a ?? $b ?? $c ?? ‘default’ .Tradotto anche per un esterno ai lavori : se $a esiste restituisci $a, altrimenti se $b esiste restituisci $b, altrimenti se $c esiste restituisci $c altrimenti restituisci ‘default’.

Passando agli oggetti troviamo l’aggiunta delle “Anonymous Classes” ovvero la possibilità di creare in realtime classi non definite che vanno ad estenderne altre già esistenti per fornire una nuova “funzionalità”, di cui abbiamo bisogno in un determinato momento.

Ad esempio:

$obj = new class("AnonymClass") extends DefinedClass {
protected notDefinedAttribute
public function setNotDefinedAttribute () { ...... }
public function getNotDefinedAttribute () { ...... }
};

Con PHP 7 è possibile anche la dichiarazione di dati scalari indirizzando obbligatoriamente l’input e l’output verso tipi di valori ben definiti. Per dati scalari si intendono tutte quelle variabili che contengono valori di tipo integer, float, string o bool. Utilizzando all’inizio del codice l’istruzione declare (strict_types=1) si obbligherà PHP ad utilizzare in modalità strict tutte le dichiarazioni nelle funzioni e nelle classi.

Così ad esempio la funzione nel seguito dovrà obbligatoriamente prendere come input un intero e restituire un outup di tipo float. Qualsiasi altra casistica darà errore e la stessa logica è applicata ai metodi delle classi:

function funzioneStrict(int $val): float {
.........
return $val;
}

Oltre alle novità presentate sinora c’è n’è una ancora più importante: l’introduzione della Throwable interface per poter gestire finalmente i fatal errors all’interno di un try/catch. Prima di PHP7 se avessimo avuto in un try/catch un oggetto null ($obj = null) ed avessimo provato ad invocare un suo metodo come ad esempio ($obj->getMethod()) l’esecuzione di tutta l’applicazione si sarebbe interrotta ed avrebbe generato un fatal error (Fal error: Call to a member function getMethod () on a non-object).

Con PHP7 questo tipo di errore è gestibile utilizzando nel catch “Error” come nell’ esempio qui di seguito:

try {
$obj = null;
$obj->getMethod();
} catch (Exception $e) {
echo "Eccezione";
} catch (Error $e) {
echo "Fatal error";
}

Infine è stata apportata l’introduzione della “Closure call” ovvero la possibilità in maniera molto semplificata di effettuare il binding programming. In questo caso si potrà ad esempio definire una funzione del tipo $func = function ($options) ed al suo interno andare ad utilizzare tutte le proprietà ed i metodi di un oggetto di tipo class (compreso quelli di tipo private) bindandolo con la closure call, come in questo esempio :

$obj = new ClassObj(); $func->call($obj, $options);

Sono state rese obsolete, infine, tutte le funzioni native mysql_* (sostituite da mysqli_*), quelle ereg_* (sostituite con preg_*) ed i tag stile asp <%= e %>.

Fonti

  1. Le slide dell’intervento ‘What To Expect From PHP 7’ utilizzate nell’articolo sono interamente disponibili qui.
  2. Qui è possibile leggere il comunicato ufficiale sul rilascio definitivo della nuova versione PHP7.

Condividi questo post

Torna a Blog