Sembra che il piacere della condivisione non sia un privilegio riservato ai soli utenti di Facebook… a poco più di una settimana dall’annuncio della pubblicazione del codice sorgente di “Hip Hop” per PHP, gli sviluppatori del famoso social networking hanno cliccato ancora una volta “Condividi”, rendendo disponibile il codice sorgente di XHP su GitHub.
XHP è stato utilizzato per lo sviluppo di Facebook Lite, e a detta degli sviluppatori sta diventando uno strumento sempre più importante nel loro metodo di lavoro. Si tratta in sostanza di un estensione che aggiunge a PHP la capacità di riconoscere in maniera nativa frammenti di XML e si colloca “a metà tra un template engine e una libreria di programmazione di interfacce utente”. Chiariamo subito come cambia la sintassi di uno script con un semplice esempio.
Prima la versione in PHP:
<?php
if ($_POST['name']) {
?>
<span>Hello, <?=$_POST['name']?>.</span>
<?php
} else {
?>
<form method="post">
What is your name?<br>
<input type="text" name="name">
<input type="submit">
</form>
<?php
}
E a seguire lo stesso script riscritto con XHP:
<?php
// note: includes omitted
if ($_POST['name']) {
echo <span>Hello, {$_POST['name']}</span>;
} else {
echo
<form method="post">
What is your name?<br />
<input type="text" name="name" />
<input type="submit" />
</form>;
}
Il secondo frammento di codice risulta leggermente più semplice da leggere grazie all’eliminazione dei tag di apertura e chiusura dello script. Come nota personale aggiungerei che in situazioni come questa trovo la sintassi alternativa per le strutture di controllo più pulita:
<? if ( $cond ): ?> ... <? else: ?> ... <? endif; ?>
La leggibilità è solo uno dei vantaggi introdotti da XHP, e forse non è nemmeno il più rilevante. Osserviamo l’istruzione:
echo <span>Hello, {$_POST['name']}</span>;
Qui non stiamo eseguendo l’output di testo semplice, ma di XML inline, come conseguenza PHP sa che la variabile in $_POST verrà usata come HTML e può eseguirne l’escaping automaticamente! Ancora: il riconoscimento “nativo” dei tag genera in fase di parsing del codice un errore in caso di HTML non corretto, il che sostanzialmente si traduce nell’impossibilità di produrre pagine malformate… interessante no?
Un’ulteriore possibilità è quella di memorizzare nodi e usarli in vari punti del flusso di esecuzione, eventualmente modificandoli così come si fa con il DOM in Javascript: una bella spinta al riuso funzionale. L’ultima caratteristica che presentano gli sviluppatori è quella di estendere la libreria PHP, definendo i propri tag XHP che possono condensare oggetti arbitrariamente complessi, dando loro un nome, gli attributi previsti e definendo un content model (che cosa il tag può contenere). Queste funzionalità fanno di XHP un vero e proprio motore di templating.
Ci sono insomma un discreto numero di ragioni che hanno destato in me una certa curiosità e mi hanno fatto desiderare di mettere alla prova il tutto. Cominciamo col dire che se siete utenti Mac dovrete pazientare ancora un pò… la compilazione su Snow Leopard (dopo aver soddisfatto i requisiti installando i pacchetti necessari) viene portata a termine senza errori ma l’estensione generata provoca un errore al momento del caricamento. E’ già stata pubblicata un issue a riguardo sul wiki di GitHub. Mano quindi alle vostre Linux box e procuratevi i pacchetti necessari:
$ sudo apt-get install git-core gcc flex bison re2c
Scaricate i sorgenti da GitHub:
$ git clone git://github.com/facebook/xhp.git
Ora portatevi nella cartella appena scaricata e procedete con la compilazione:
$ phpize5 $ ./configure $ make $ sudo make install
Ci siamo quasi… non resta che aggiungere a php.ini la direttiva per la nuova estensione:
extension=xhp.so
Se avete diverse versioni di php installate verificate che la cartella delle estensioni specificata in php.ini contenga effettivamente il modulo. Ci siamo! Se tutto è andato bene dovreste essere in grado di eseguire senza errori:
php -r 'echo "XHP!\n"; exit; <a />;'
Per chi se lo stesse chiedendo, il codice su GitHub contiene, oltre ai sorgenti dell’estensione, la libreria PHP che implementa tutti i tag HTML non deprecati e le funzioni per agire su di essi e, dulcis in fundo, lo script “xhpize”, con il quale è possibile convertire codice con sintassi XHP in codice PHP standard. Ora non avete davvero più scuse, provate XHP e fateci sapere cosa ne pensate…