Programmazione.it
PHP 5.6, le estensioni al linguaggio
Scritto da Filippo Fadda il 06-10-2014 ore 16:36
Il 2 ottobre è stato rilasciata la release 5.6.1, che risolve diversi bug, più o meno importanti, che affliggono PHP 5.6, uscito verso la fine di agosto. Ho installato la versione 5.6 pressoché immediatamente, ma non sono ancora riuscito ad utilizzarla, propriamente, per via di alcune incompatibilità con Phalcon, il framework che sto utilizzando per la realizzazione di PitPress, la nuova piattaforma di Programmazione.it.

Non dovendo sviluppare per terzi ed avendo a disposizione un server tutto mio, mi è consentito utilizzare, prima di altri, tutte le nuove caratteristi che il linguaggio mette a disposizione. In quanto early adopter, sono probabilmente tra i pochi ad aver visto e giocato con l'ultima versione di PHP, pertanto, visto che non l'ho ancora fatto, vorrei passare in rassegna le novità della 5.6, perché le ritengo piuttosto interessanti, almeno quelle relative al linguaggio in sé.
Faccio presente, per correttezza, che gli esempi di seguito riportati sono tutti tratti dal sito ufficiale.

Chiunque abbia usato PHP saprà che cosa è, e come si dichiara, una costante. Probabilmente sarà anche al corrente del fatto che, sino ad ora, ad una costante non poteva essere assegnato il valore di un'espressione. Tale limitazione non soltanto era presente sulle costanti, ma anche nei parametri delle funzioni, il cui valore di default non poteva essere rappresentato da un'espressione. Con PHP 5.6.1 queste limitazioni sono state superate, grazie all'introduzione delle constant scalar expressions.

[code=php]
const ONE = 1;
const TWO = ONE * 2;

class C {
const THREE = TWO + 1;
const ONE_THIRD = ONE / self::THREE;
const SENTENCE = 'The value of THREE is '.self::THREE;

public function f($a = ONE + self::THREE) {
return $a;
}
}

echo (new C)->f()."n";
echo C::SENTENCE;
[/code]

Ancora più interessante è l'estensione del supporto alle funzioni variadiche. La traduzione è impropria, in italiano, che io sappia, non esiste un vocabolo equivalente, ed anche l'inglese è prettamente tecnico. Si tratta, tanto per capirci, di quelle funzioni la cui lista di parametri ha una lunghezza variabile, come ad esempio `sprintf()`. Sebbene il supporto a tali funzioni sia presente da tempo attraverso `func_get_args()`, solo ora possibile fare ricorso all'operatore `...`, anziché appoggiarsi alla suddetta funzione. La sintassi è molto più elegante ed il codice più semplice da scrivere.

[code=php]
function f($req, $opt = null, ...$params) {
// $params is an array containing the remaining arguments.
printf('$req: %d; $opt: %d; number of params: %d'."n",
$req, $opt, count($params));
}

f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);
[/code]

Il medesimo operatore può anche essere utilizzato per esplodere il contenuto di un array, o di un qualunque oggetto sia istanza di una classe che implementa Traversable, in N parametri, come nell'esempio sottostante:

[code=php]
function add($a, $b, $c) {
return $a + $b + $c;
}

$operators = [2, 3];
echo add(1, ...$operators);
[/code]

All'operatore di cui sopra si aggiunge quello per l'esponenziazione ed il relativo operatore di assegnamento, nella fattispecie `**` e `**=`. Per calcolare 2 elevato 3, è ora possibile scrivere `2 ** 3`.

[code=php]
printf("2 ** 3 == %d", 2 ** 3);
printf("2 ** 3 ** 2 == %d", 2 ** 3 ** 2);

$a = 2;
$a **= 3;
printf("a == %d", $a);
[/code]

Per quanto riguarda il linguaggio vi è un'ultima novità: l'estensione del costrutto `use`, prima relegato alle sole classi, alle costanti ed alle funzioni. E' ora infatti possibile definire costanti e funzioni a livello di namespace ed importarle in un altro, potendo costruire delle vere e proprie librerie di funzioni. Si tratta a mio avviso di un grande passo avanti.

Per un elenco esaustivo delle novità introdotte potete fare riferimento alla pagina ufficiale, in inglese.
Copyright Programmazione.it® 1999-2005. Tutti i diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002.