E’ stato rilasciato la nuova versione del linguaggio più usato del web. Php è arrivato alla versione 5.4. Grandi cambiamenti sono in atto per questo linguaggio. Molte integrazioni non sono state rilasciate in questa versione, optando per la successiva a causa di conflitti interni tra gli sviluppatori.

 

 

 

 

 

 

 

Le novità sono veramente interessanti:

  • traits : ereditarietà orizzontale, introducono la possibilità di utilizzo di metodi tra le classi;
  • un server HTTP integrato: ottima utility permette di avere a disposizione un piccolo webserver utilizzabile tramite CLI (command line interface) per finalità di test e sviluppo;
  • deferenziazione degli array (Array dereferencing). Nuova sintassi con abbreviazione della dichiarazione;
  • supporto per il $this per l’accesso alle proprietà degli oggetti, con funzioni anonime;
  • deprecazione di alcune funzionalità come “magic quotes” già deprecate anche dalla versione 5.3.0.

Vediamole in breve.

I Traits

Una delle novità più interessanti della nuova versione di php 5.4. In casa Php questa nuova integrazione non ha convinto tutti gli addetti ai lavori a causa delle limitazioni dovute alla struttura base del linguaggio.

I Traits sono collezioni di metodi o meglio porzioni di sorgente recanti metodi dove vengono collezionate funzioni riutilizzabili in altre classi. Con i Traits si parla di eredità multipla, grazie ad esso è possibile generare una classe che erediti caratteristiche di più classi principali.

Vediamo come funzionano.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// definizione della classe principale
    class Nome {
        public function getNome() {
            echo 'Google';
        }
 
    }
 
    // definizione di un trait
    trait Estensione {
        public function getNome () {
            parent:: getNome ();
            echo '.it';
        }
 
    }
 
    // definizione di una sottoclasse che eredita dalla classe base
    class dominio extends Nome {
        use Estensione;
    }
 
    // istanza della classe derivata
    $obj = new dominio();
    // chiamata al metodo
    $obj-> getNome();

Questo codice restituirà “Google.it” . Il sorgente è strutturato con 2 classi ed 1 trait, la classe principale è “Nome“, seguita da un trait  chiamato “Estensione” che utilizza il metodo di Nome e cioè getNome() e stampa “.it”. Viene definita una classe nuova chiamata “dominio” che estende la classe “Nome” e (qui vediamo l’utilizzo dei Trait) usando la classe trait “Estensione“.  Il nuovo oggetto, creato da dominio(); utilizzerà il trait per eseguire il metodo getNome() e quindi verrà stampato il risultato “Google.it”.

 Webserver integrato

L’integrazione di un webserver in php 5.4 ha come scopo quello di aiutare gli sviluppatori per testare il proprio codice velocizzando i tempi di sviluppo/test. Non vuole essere però un’alternativa ai noti webserver come Apache e simili.

Per utilizzare il webserver, lo si fa dalla riga di comando quindi dalla CLI (command line interface)

1
2
$cd /public_html
$php -S localhost:8181

Il webservice risponderà cosi

1
2
3
4
PHP 5.4.0 Development Server started at ...
Listening on localhost:8181
Document root is /home/tuoutente/public_html
Press Ctrl-C to quit

Semplice ed immediato, basta collegarsi dal browser http://localhost:8181. Per gestire altre cartelle basta aggiungere il comando “$php -S localhost:8181 -t cart_progetto/” sempre all’interno della document root.

Nuova sintassi e dereferenziazione degli array

Altro grande motivo di pareri discordanti in casa PHP è quello della nuova sintassi per la definizione degli array. La nuova sintassi somiglierebbe molto a quella oramai nota di JSON, infatti l’associazione è stata fatta proprio volutamente, per cercare di uniformare le varie sintassi.

1
2
3
4
5
6
$a = [1, 21, 143];
$b = ['pippo' => 'cartoon', 'pluto' => 'cane', 'attila' => 'barbaro'];
echo $a[0];
echo '
';
echo $b['giuseppe'];

Deferenziazione

La deferenziazione invece permetterebbe di richiamare il valore di un array attraverso la chiamata ad una funzione che ritorna un array, la quale può accedere direttamente al valore ritornato senza la necessità di passare per una variabile.

1
2
3
4
function dereferenziazione() {
    return array('php', 'perl', 'python');
}
echo dereferenziazione()[0];

La funzione stamperà il primo valore dell’array, in quanto [0]  è associato al primo valore dell’array.

Questo metodo funziona anche se si vuole creare delle closures ottenendo il medesimo risultato.

1
2
3
4
$dereferenziazione = function() {
    return array('php', 'perl', 'python');
};
echo $dereferenziazione()[0];

Utilizzo di $this nelle closures

Una delle novità di php 5.4 è l’introduzione al nuovo utilizzo di $this nelle closures. Esso infatti fornisce la possibilità di accedere alle proprietà degli oggetti indifferentemente dal tipo di visibilità.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
   // definizione della classe
    class MyClass {
        // variabile con visibilità private
        private $var = 222;
        function pippo($x) {
            // closure
            return function() use ($x) {
                // valore di ritorno
                return $this->$x;
            };
        }
 
        function pluto() {
            return function($x)  {
                return $this->$x;
            };
        }
    // chiusura classe
    }
 
    // istanza della classe
    $obj = new MyClass();
    // accesso alle proprietà dell'oggetto
    $pippo = $obj->pippo('var');
    echo $pippo();
    echo '';
    $pluto = $obj->pluto();
    echo $pluto('var');

Vorrei che focalizzaste l’attenzione su $pippo(); dove viene utilizzato un echo per stampare a schermo il risultato della funzione inclusa. Nel secondo caso viene fatto l’esatto opposto passando prima la funzione dentro $pluto e poi eseguendola passandogli un valore “var“. Entrambi restituiranno il medesimo risultato. Sapreste dirmi quale? La risposta è nascosta nel testo di questo articolo.

Funzionalità deprecate in 5.4

  • magic quotes per l’escape automatico dei valori passati tramite query SQL;
  • sintassi break/continue per le variabili nei cicli;
  • safe mode, già deprecato in PHP 5.3, e relative direttive;
  • direttive register_globals e register_long_arrays;
  • opzione allow_call_time_pass_reference.
Funzionalità Future 
  • Annotations: integrazione dei metadati all’interno del sorgente. I metadati rappresenteranno le informazioni relative alla generazione del codice di supporto che non dovrà essere più prodotto manualmente;
  • Estensione per il caching APC: soluzione dell’overhead (richiesta di risorse) durante il processo di compilazione opcode (codice operativo),  la sua introduzione è richiesta in particolare per le applicazioni che devono gestire elevati livelli di traffico.

La risposta da casa Php è arrivata e sembra portare cambiamenti sostanziali al codice. Molti sono stati i conflitti interni per decidere la gestione dello sviluppo delle nuove funzionalità, ma alla fine il risultato è che PHP resta ancora il linguaggio più utilizzato e più ottimizzato per il web.