Warning: Undefined array key "tbm_guide_level" in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Undefined array key "tbm_guide_level" in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Undefined array key "tbm_guide_level" in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113

Warning: Trying to access array offset on value of type null in /data/websites/htmlit/web/app/themes/htmlit/src/ViewModel/Post/Templates/SingleGuide.php on line 113
Le novità di PHP 5.5 | HTML.it
Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Le novità di PHP 5.5

Tutte le novità di PHP 5.5, la nuova versione del più utilizzato linguaggio di programmazione sul Web
Tutte le novità di PHP 5.5, la nuova versione del più utilizzato linguaggio di programmazione sul Web
Link copiato negli appunti

Ieri è stata rilasciata la prima versione Beta della futura versione di PHP. PHP 5.5 presenta numerose novità sia dal punto di vista  delle funzionalità addizionali che per quanto riguarda le incompatibilità e le  features divenute deprecate rispetto alle versioni precedenti. In questa breve  trattazione verrà proposta una panoramica dei nuovi strumenti disponibili dopo  l’upgrade e delle modifiche apportate con tale rilascio.

I generators

Con PHP 5.5 il linguaggio integra il supporto per i generators che diventano  accessibili tramite la parola chiave yield; attraverso di essi si  disporrà di una modalità semplice ed immediata per l’implementazione di  costrutti finalizzati all'iterazione, evitando in questo modo il verificarsi di  overhead (richieste per risorse accessorie) così come la necessità di ricorrere  ad una classe che implementi l’interfaccia Iterator.

Nel caso specifico, un generator permetterà di digitare sorgenti  in cui il ciclo foreach viene adottato per iterare dataset evitando  l’allocazione di un array in memoria; in pratica esso lavora come una qualsiasi  altra funzione se non per il fatto un generator potrà ripetersi tante volte  quante quelle necessarie per la restituzione di tutte le iterazioni previste. Un  esempio riguardante il funzionamento di questo costrutto potrebbe essere il  seguente:

<?php
function newrange($inizio, $fine, $intervallo) {
	for ($x = $inizio; $x <= $fine; $x += $intervallo) {
	// valore di ritorno
    	yield $x;
	}
}
foreach (newrange(100, 900, 100) as $risultato) {
	echo $risultato . " ";
}
?>

Nel caso del codice proposto, il cui output sarà:

100 200 300 400 500 600 700 800 900

è stato introdotto il generator newrange() range()

Nel momento in cui si effettua una chiamata ad un generator esso fornisce un  oggetto iterabile, il parser del linguaggio chiamerà la relativa funzione ogni  volta che si renderà necessario un valore e memorizzerà lo stato corrente del  generatore, in questo modo il ciclo potrà essere ripreso con la richiesta del  valore successivo e così via fino all’ultima delle iterazioni possibili

Supporto per finally nella gestione delle eccezioni

Come è noto, con PHP 5 venne introdotto un modello per la gestione delle  eccezioni, mutuato da altri linguaggi, che prevede l’utilizzo di blocchi  try/catch; in esso try prova ad eseguire una o più istruzioni,  throw istanzia  l’oggetto Exception per l’eventuale gestione delle eccezioni e  catch ha il  compito di eseguire un’istruzione alternativa (ad esempio la notifica  dell’eccezione stessa). Con il rilascio di PHP 5.5 è possibile specificare un  ulteriore blocco, finally, destinato a contenere codice che dovrà essere  eseguito a prescindere dall’esito delle istruzioni previste attraverso  try/catch. Per fare un esempio, si pensi al classico errore di divisione di un  valore numerico per zero, fino a PHP 5.4.x esso sarebbe stato gestibile nel modo  seguente:

<?php
$x = 5;
$y = 0;
try{
 if ($y == 0){
  throw new Exception("Divisione per zero.");
 }else{
  echo $x/$y;
 }
}
 catch (Exception $e)
 {
  echo "Eccezione rilevata: ",  $e->getMessage(), "n";
}
?>

Una volta rilevata l’eccezione, l’esito dell’esecuzione sarebbe stato il  seguente output:

Eccezione rilevata: Divisione per zero.

In PHP 5.5 si potrà invece aggiungere subito dopo try/catch un ulteriore  blocco espresso sul modello del seguente:

finally
{
 echo "Questa istruzione deve essere eseguita in ogni caso.";
}

Esso permetterà di introdurre un nuovo comportamento (nell’esempio un output  addizionale) non vincolato alla gestione prevista per l’eccezione e produrrà  l’output ad esso associato prima del ritorno da parte dell’applicazione alla  normale esecuzione delle istruzioni successive.

Supporto per list()

list() list() list()
<?php
$numeri = [
	[1, 2],
	[3, 4],
];
foreach ($numeri as list($dispari, $pari)) {
	echo "X: $dispari - Y: $pari.<br />n";
}
?>

L’effetto delle assegnazioni sarà visibile immediatamente tramite l’output dello script:

X: 1 - Y: 2.
X: 3 - Y: 4.

In pratica l’assegnazione dei valori avviene a partire da quello associato alla chiave “0” per poi proseguire in ordine crescente, per cui alla variabile $dispari

Espressioni arbitrarie in empty()

!isset($var) || $var == false empty()
<?php
function vero_o_falso() {
	return false;
}
if(empty(vero_o_falso())) {
	echo “Vero.”;
}
if (empty(true)) {
	echo “Falso.”;
}
?>

In PHP 5.5, che supporta il passaggio di espressioni come argomenti ad empty()

Vero.

In quanto la funzione definita dall’utente genererà un (non) valore di ritorno pari a false

Deferenziazione di array e string literals

La Dereferenziazione (Dereferencing) di array e string literals
(rappresentazioni dei valori stringa) consente di effettuare l’accesso diretto
ad elementi specifici; per cui, nel caso degli array, si potrà per esempio
effettuare un’operazione come la seguente:

<?php
echo [10, 20, 30][0];
?>

l’output dello script sarà uguale a “10" in quanto questo è appunto il valore
associato alla chiave “0" all’interno dell’array; tale meccanismo potrebbe
ricordare quello già introdotto in PHP 5.4 con l’array
dereferencing in stile JSON
che
consentiva dereferenziare un array quale valore di ritorno di una funzione, ma
rappresenta una sua evoluzione ed è supportato solo in PHP 5.5 (nella versione
5.4.x darebbe luogo ad un errore di parsing). Per quanto riguarda le stringhe,
si potranno effettuare dereferenziazioni utilizzando un metodo molto simile a
quello già proposto per i vettori:

<?php
echo "HTML.it"[0];
?>

L’output dello script sarà “H" in quanto i caratteri della stringa vengono
associati singolarmente a chiavi numeriche ordinate da “0" ad “n", quindi,
nell’esempio proposto “H" avrà chiave “0", la prima “T" chiave “1" e così via
fino alla “t" finale con chiave “6".

La nuova API per il password hashing

PHP 5.5 presenta una nuova interfaccia di programmazione per il password
hashing, si tratta in pratica di un wrapper per la funzione crypt() che
restituisce stringhe cifrate tramite l’algoritmo per Unix basato sul Data
Encryption Standard o un omologo disponibile attraverso il sistema di
riferimento. Nel quadro di tale innovazione si inserisce la funzione
password_hash() che ha appunto il compito di creare una nuova password hash,
essa accetta come argomenti la password decriptata, una costante riferita
all’algoritmo utilizzato (PASSWORD_BCRYPT o in alternativa
PASSWORD_DEFAULT) e
le opzioni cost e salt. Un semplice esempio di utilizzo della funzione potrebbe
essere il seguente:

<?php
echo password_hash("HTML.it", PASSWORD_DEFAULT)."n";
$parametri = [
	'cost' => 7,
	'salt' => 'cfEnf3d4x9D1M53rtWd5dg',
];
echo password_hash("HTML.it", PASSWORD_BCRYPT, $parametri)."n";
?>

Lo script darà luogo a un output composto da due stringhe sul modello di
quelle proposte di seguito:

$2y$10$RZjT7UYXe2ijKNEZZD9ifeVfeGauatl67IHGisRlS8alYdRl0EOtm $2y$07$cfEnf3d4x9D1M53rtWd5deaYKCmklwj04ysMlK93rDc4wPOJBcxVW

La costante PASSWORD_DEFAULT indica che dovrà essere utilizzato l’algoritmo
predefinito in mancanza di un’indicazione differente, mentre PASSWORD_BCRYPT
viene passato alla funzione per la generazione di un hash basato sull’algoritmo
CRYPT_BLOWFISH; l’opzione (o fattore) cost specifica la quantità di cicli di
algoritmo che dovranno essere eseguiti prima della produzione della stringa di
output, mentre salt è una sequenza casuale introdotta per rendere più
difficoltosa la violazione della password.

La funzione boolval()

boolval()
<?php
echo '"HTML.it": '.(boolval("HTML.it") ? 'true' : 'false')."n";
?>

restituirà true

<?php
echo '0: '.(boolval(0) ? 'true' : 'false')."n";
?>

restituirà false FALSE

Incompatibilità e funzionalità deprecate

In buona parte PHP 5.5 garantisce un soddisfacente livello di
retrocompatibilità con le versioni precedenti del linguaggio, vi sono però
alcuni aspetti che dovranno essere tenuti in considerazione prima di eventuali
migrazioni. Innanzitutto, con questa release non viene più garantito il supporto
per Windows XP e Windows 2003
, per cui se si intende lavorare su una piattaforma
della Microsoft si dovrà disporre come minimo di Windows Vista. In secondo
luogo, l’originale estensione MySQL del linguaggio è da considerarsi deprecata,
ciò significa che d’ora in poi per i propri progetti sarà necessario valutare
l’uso di soluzioni alternative come MySQLi o PDO; l’eventuale utilizzo della
MySQL extension porterebbe alla notifica di errori E_DEPRECATED in connessione
con il DBMS.

Conclusioni

Con PHP 5.5 vengono introdotte alcune novità a livello di costrutti, di
supporto per i sistemi operativi e di funzionalità deprecate; in questa
trattazione sono state descritte le caratteristiche più rilevanti del rilascio,
un’eventuale consultazione del manuale ufficiale del linguaggio
(http://www.php.net/manual/en/migration55.php) permetterà di approfondire gli
argomenti trattati riguardo alle modifiche meno rilevanti apportate
dall’aggiornamento.

Ti consigliamo anche