Php 7.2: Tutte le novitá

Php 7.2: Tutte le novitá
by Janeth Kent Date: 24-11-2017 php

Il 30 Novembre 2017 è previsto il rilascio di una nuova versione del linguaggio di programmazione PHP, la 7.2. Questa versione è il frutto di 6 mesi di test con il rilascio di 12 versioni tra alpha, beta e Release Candidate (RC), l'ultima della quale rilasciata il 9 Novembre. In questo articolo sono riportate alcune delle principali novità introdotte con la versione 7.2.

Performance

Come sappiamo, le performance del PHP 7, rispetto alla versione precedente sono migliorate in maniera sbalorditiva. I tempi di esecuzione, secondo la maggior parte dei benchmark in circolazione, si sono praticamente dimezzati rispetto alla versione 5, rendendo il PHP uno dei linguaggi interpetati più veloci del mondo (vedi grafico).

Il PHP 7.2, rispetto al PHP 7.0 e 7.1 introduce ulteriori miglioramenti dal punto di vista delle performance, con un aumento di qualche punto percentuale.

Di seguito è riportato un benchmark eseguito da Michael Larabel e pubblicato in questa pagina web.

Tipo object

La prima novità riguarda l'introduzione di un nuovo tipo di variabile, object. Questo tipo può essere utilizzato per rappresentare tutti gli oggetti PHP. Di seguito è riportato un esempio:

function test(object $obj) : object
{
    return new SplQueue();
}

test(new StdClass());

La funzione test accetta come parametro una variabile di tipo object e restituisce un valore di tipo object. E' possibile utilizzare qualsiasi oggetto, nell'esempio un'istanza di SplQueue o StdClass.

L'introduzione del tipo object colma una precedente lacuna del PHP, aggiungendo gli oggetti tra i tipi scalari del linguaggio. Questo nuovo tipo di variabile può risultare utile in tutti quei casi in cui sia necessario gestire il passaggio (o il ritorno) di oggetti provenienti da classi diverse (non in relazione tra loro).

Overriding di metodi astratti

Con il PHP 7.2 è possibile effettuare l'overriding (sovrascrittura) di metodi astratti. In particolare, è possibile omettere il tipo di un parametro in ingresso rispettandone la controvarianza (contravariance), ossia l'utilizzo di un vincolo meno restrittivo. Così come è possibile effettuare la covarianza (covariance) di un valore restituito da una funzione, ossia l'utilizzo di un tipo più restrittivo.

Di seguito è riportato un esempio:

abstract class A
{
    abstract function test(string $s);
}

abstract class B extends A
{
    abstract function test($s) : int;
}

Il metodo B::test() sovrascrive il metodo A::test() utilizzando un parametro in ingresso $s meno restrittivo (senza tipo) e specificando un valore in uscita più restrittivo (int).

L'overriding del metodo può avvenire anche nel caso di un'interfaccia. Di seguito è riportato un esempio:

interface A
{
    public function test(string $s);
}

class B implements A
{
    public function test($s){} 
}

Supporto algoritmo Argon2i

A partire dal PHP 7.2 è possibile utilizzare il nuovo algoritmo Argon2 per l'hash delle password utente. Questo algoritmo è considerato al momento il metodo più sicuro per la memorizzazione delle password utente. Argon2 offre una sicurezza superiore rispetto a bcrypt, l'algoritmo di default dalla funzione password_hash() del PHP. In particolare, Argon2 è stato progettato per mitigare possibili attacchi di forza bruta basati su algoritmi paralleli, eseguiti su GPU.

La versione utilizzata dal PHP 7.2 dell'algoritmo è la variante Argon2i ritenuta la più sicura per le password. Per utilizzarla è necessario utilizzare la funzione password_hash() del PHP specificando la costante PASSWORD_ARGON2I. Di seguito è riportato un esempio:

$password = 'test';
$hash = password_hash($password, PASSWORD_ARGON2I);
var_dump($hash);

Eseguendo questo script PHP la variabile $hash conterrà una stringa di 98 caratteri, simile alla seguente:

$argon2i
$v=19
$m=1024,t=2,p=2
$TmxLemFoVnZFaEJuT1NyYg
$4j2ZFDn1fVS70ZExmlJ33rXOinafcBXrp6A6grHEPkI

Questa stringa contiene 5 sequenze suddivise dai caratteri $. La prima (argon2i) è il nome della funzione hash; la seconda (v=19) è la versione dell'algoritmo; la terza contiene i parametri dell'algoritmo: m, il costo della memoria (espresso in kB); t, il costo di esecuzione e p, il costo del parallelismo. La quarta sezione contiene un valore pseudo-casuale (detto salt) utilizzato nell'algoritmo e l'ultima sezione contiene il valore hash vero e proprio.

Questa stringa di 98 caratteri può essere memorizzata in un database. La verifica può essere effettuata tramite la solita funzione password_verify() del PHP.

Crittografia avanzata con Sodium

Il PHP 7.2 offre il supporto alla libreria libsodium per funzionalità avanzate di crittografia, tramite la nuova estensione Sodium.

Quest'estensione offre numerose funzioni per l'utilizzo di algoritmi di crittografia moderni, come il supporto alla crittografia ellittica.

Il PHP è di fatto l'unico linguaggio al mondo ad offrire queste funzionalità avanzate di sicurezza. Per maggiori informazioni sulle funzionalità di Sodium, consiglio la lettura del post di Scott Arciszewski, PHP 7.2: The First Programming Language to Add Modern Cryptography to its Standard Library.

SQL query debug per PDO

La funzione PDOStatement::debugDumpParams consente di visualizzare informazioni di debug sull'interrogazione SQL generata attraverso l'utilizzo della funzione PDO::prepare. A partire dalla versione 7.2, questa funzione di debug consente di visualizzare anche la stringa SQL eseguita sul database.

Prima di questa versione, le informazioni di debug riportavano l'interrogazione SQL con la presenza di parametri in bind. Questa modalità non consentiva, a volte, un debugging efficace delle istruzioni SQL generate da PDO. Di seguito è riportato un esempio:

$pdo = new PDO(
    'mysql:dbname=test;host=localhost',
    'user',
    'password'
);
$sth = $pdo->prepare("SELECT * FROM user WHERE active=:active");
if (! $sth->execute(['active' => true])) {
    print_r($sth->errorInfo());
    exit(1);
}
$sth->debugDumpParams();

Il PHP 7.2 genera un output di questo tipo:

SQL: [39] SELECT * FROM user WHERE active=:active
Sent SQL: [35] SELECT * FROM user WHERE active='1'
Params:  1
Key: Name: [7] :active
paramno=-1
name=[7] ":active"
is_param=1
param_type=2

E' possibile notare la presenza della riga Sent SQL con l'interrogazione SQL effettivamente eseguita sul db. Questa è l'informazione che è stata aggiunta con il PHP 7.2.

Nuove funzioni

Il PHP 7.2 introduce alcune nuove funzioni, alcune delle quali sono: ftp_append(), hash_hmac_algos(), imagesetclip(), imagegetclip(), imageopenpolygon(), imageresolution(), imagecreatefrombmp(), imagebmp().

Per l'elenco completo delle nuove funzioni, è possibile far riferimento a questa pagina web.

Funzioni deprecate

Con il PHP 7.2 vengono deprecate alcune funzioni del linguaggio. Alcune di queste sono: metodo __autoload(), create_function(), gmp_random(), each(), assert() con un argomento di tipo stringa, parse_str() senza un secondo argomento, png2wbmp(), jpeg2wbmp().

Conclusioni

Le novità introdotte dal PHP 7.2 sono tante, tra le più significative il supporto del tipo object, l'utilizzo dell'algoritmo Argon2 per la memorizzazione sicura delle password e la nuova estensione Sodium per l'utilizzo di funzioni avanzate di crittografia.

Rimaniamo in attesa del rilascio della versione stabile 7.2.0 prevista per il 30 Novembre 2017.

 
by Janeth Kent Date: 24-11-2017 php visite : 5144  
 
Janeth Kent

Janeth Kent

Licenciada en Bellas Artes y programadora por pasión. Cuando tengo un rato retoco fotos, edito vídeos y diseño cosas. El resto del tiempo escribo en MA-NO WEB DESIGN AND DEVELOPMENT.

 
 
 

Articoli correlati

Come configurare Google reCAPTCHA v3 in un form PHP

Un semplice esempio che mostra come aggiungere il nuovo Google reCAPTCHA v3 a un modulo PHP. reCAPTCHA v3 aiuta a rilevare il traffico abusivo senza dar fastidio agli utenti del nostro…

Rilaciato PHP 7 versione stabile

Abbiamo dovuto attendere mesi...Finalmente, hanno finalmente rilasciato la versione stabile di PHP 7.0.0, major release nata con lo scopo di soddisfare le istanze della community in tema di miglioramento delle prestazioni…

Winginx, un server nginx completo per windows

Quando abbiamo bisogno di montare un server Apache su Windows o Mac abbiamo opzioni WAMP e MAMP molto conosciute come XAMPP, tuttavia si stanno facendo popolari nuove soluzioni di server…

Come importare file .ICS in una tabella MySQL utilizzando PHP

Come noto, il formato file .ICS è un formato di calendario universale utilizzato per memorizzare le informazioni del calendario all'interno di un file di testo. In questo articolo vedremo come creare…

Le migliori estensioni di Firefox per sviluppatori web

Una delle pincipali ragioni della grande popolarità di Mozilla Firefox, oltre all'usabilità, è la sua enorme varietà di estensioni (add-ons) create con la finalità di migliorare l'esperienza di navigazione degli…

20 Cheat Sheets per sviluppatori web

I cheat sheet sono una risorsa utilissima per gli sviluppatori poiché consentono di avere a portata di mano una lista completa di tutte o quasi tutte le funzioni e la…

Le basi di SQL: select, insert, update e delete

SQL è il linguaggio di definizione e manipolazione dei dati universalmente usato nelle basi di dati relazionali. Esso ha le seguenti funzioni: definizione dei dati: SQL permette di definire, in modo integrato, i tre livelli…

I segreti tecnologici di un gigante del porno: YouPorn

The Internet is for porn. Questa frase si è convertita da numero musicale di Off-broadway ad un vero e proprio assioma del Web. I siti web porno più noti, ricevono milioni di visite giornaliere…

PHP: due funzioni per creare short urls

  Gli SHORT URLS fanno ormai parte di quelle cose di internet che ci suonono terribilmente familiari; per capirci uno short url lo vedete ogni qualvolta mettete un link su Twitter…

Tutorial Intermedio a mod_rewrite

1 Cosa fa il mod rewrite ? Il mod rewrite serve per il vostro server apache a far si che le pagine dinamiche (in questo caso in php) cambino totalmente estensione…

Clicky