Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicit� Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
PHP 5.6, le estensioni al linguaggio
Scritto da Filippo Fadda il 06-10-2014 ore 16:36
Intel Code Modernization Workshops 2016
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.
  1. const ONE = 1;
  2. const TWO = ONE * 2;
  3.  
  4. class C {
  5.     const THREE = TWO + 1;
  6.     const ONE_THIRD = ONE / self::THREE;
  7.     const SENTENCE = 'The value of THREE is '.self::THREE;
  8.  
  9.     public function f($a = ONE + self::THREE) {
  10.         return $a;
  11.     }
  12. }
  13.  
  14. echo (new C)->f()."n";
  15. echo C::SENTENCE;

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.
  1. function f($req, $opt = null, ...$params) {
  2.     // $params is an array containing the remaining arguments.
  3.     printf('$req: %d; $opt: %d; number of params: %d'."n",
  4.            $req, $opt, count($params));
  5. }
  6.  
  7. f(1);
  8. f(1, 2);
  9. f(1, 2, 3);
  10. f(1, 2, 3, 4);
  11. f(1, 2, 3, 4, 5);

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:
  1. function add($a, $b, $c) {
  2.     return $a + $b + $c;
  3. }
  4.  
  5. $operators = [2, 3];
  6. echo add(1, ...$operators);

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`.
  1. printf("2 ** 3 == %d", 2 ** 3);
  2. printf("2 ** 3 ** 2 == %d", 2 ** 3 ** 2);
  3.  
  4. $a = 2;
  5. $a **= 3;
  6. printf("a == %d", $a);

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.
Precedente: PhpStorm 7, sempre pi ricco e maturo
Successiva: Un'anteprima di Programmazione.it 7.0
Copyright Programmazione.it™ 1999-2016. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.277 secondi.