Roma – Sebbene la popolarità del linguaggio PHP sia costantemente in aumento, non mancano le perplessità sulla effettiva proponibilità di PHP per lo sviluppo di applicazioni complesse. Molta strada è stata percorsa dai tempi di PHP/FI, con un salto di qualità addirittura epocale quale è stato il passaggio dalla versione 3 alla 4. È altrettanto indubbio, tuttavia, che c’è bisogno di proseguire nel miglioramento del linguaggio se si vuole evitare il rischio che rimanga relegato nel ruolo di “giocattolo” o poco più.
Fortunatamente qualcosa di molto interessante bolle in pentola: la nuova generazione di Zend, il “motore” alla base del linguaggio, che promette innovazioni significative rispetto alla situazione attuale.
Alcuni problemi attuali
Prima di anticipare le novità del nascituro Zend 2.0, soffermiamoci per un po’ su quegli aspetti critici del linguaggio a cui si è accennato in precedenza.
Il primo è certamente il supporto limitato al paradigma object-oriented. Nonostante i miglioramenti introdotti in questa direzione da PHP4 (basato su Zend 1.0) rispetto alla precedente versione 3 (basata su Zend “0.5”), PHP rimane essenzialmente un linguaggio procedurale, con tutte le problematiche che ciò comporta. Scrivere codice PHP pulito (nel senso di scevro da “truccacci” di qualsivoglia genere) non è semplice; se poi si ambisce alla riusabilità del software diventa ancor più evidente che, pur adottando il massimo rigore, non si riesce ad andare oltre un livello di complessità medio-basso.
Un altro aspetto critico è quello della mutevolezza di alcune caratteristiche del linguaggio: si pensi, ad esempio, alla gestione delle cosiddette variabili esterne (ne abbiamo già parlato), modificata sensibilmente in almeno due occasioni. Questa particolare “instabilità”, ulteriormente accentuata dal fatto che spessissimo cambiamenti anche di rilievo avvengono in occasione di minor release, se non verrà in qualche modo arginata, rischia di dar vita ad innumerevoli micro-versioni di PHP, sottilmente (e diabolicamente) incompatibili fra loro. Il rischio, insomma, è che quello che oggi è buon codice, divenga domani un lavoro da rifare, in tutto o in parte.
Le due limitazioni sopra menzionate richiedono ovviamente soluzioni diverse. Tuttavia mentre per quanto riguarda la seconda possiamo solo auspicare una stabilizzazione delle caratteristiche del linguaggio, per la prima ci sono buone notizie in arrivo. Possiamo, quindi, introdurre la prossima generazione di Zend, il motore del PHP che verrà.
Zend 2.0
La novità più importante di Zend 2.0 sarà il miglioramento del supporto per la programmazione object-oriented (OOP). Alla base delle nuove funzionalità, che verranno descritte nel resto dell’articolo, vi è una riprogettazione del modello ad oggetti usato da PHP fortemente influenzata dal linguaggio Java.
Il nuovo modello ad oggetti
Zend 2.0, in particolare, introduce la gestione degli oggetti (un oggetto, ricordiamo, è una istanza di una classe, una sua “incarnazione”) tramite handles, degli identificatori assimilabili a puntatori. Nella serie 1.x di Zend, invece, gli oggetti vengono trattati come valori del linguaggio al pari di stringhe, interi, etc.
Le conseguenze immediate di questa novità sono notevoli. Assegnare ad una variabile un oggetto significherà copiare in essa l’handle che lo identifica e non copiare l’intera istanza. Analogamente in caso di passaggio di un oggetto come argomento di una funzione sarà il solo handle ad essere fornito alla funzione stessa, evitando così una duplicazione inutile e una potenziale fonte di bachi.
Fin qui si potrebbe avere l’impressione di non avere di fronte nulla di nuovo rispetto all’uso dei riferimenti (references) introdotti in PHP4. Risulta evidente il contrario se si considerano le possibilità inedite rese fattibili dal nuovo modello ad oggetti. Vediamone alcune.
Dereferenziazione. Il nuovo modello ad oggetti renderà possibili istruzioni del tipo $oggetto1->metodo1()->metodo2() dove metodo2() viene invocato rispetto all’oggetto restituito da metodo1(). Questa funzionalità, disponibile in molti linguaggi di programmazione, oltre ad essere di uso molto intuitivo, consente di scrivere codice più sintetico e previene alcuni tipi di errore.
Distruzione esplicita di oggetti. Mentre con l’attuale versione di Zend è impossibile deallocare un oggetto esplicitamente (la distruzione avviene automaticamente quando non vi sono più riferimenti ad esso), nel nuovo Zend ci sarà una funzione, delete(), che consentirà di distruggere un oggetto anche quando vi siano variabili che fanno riferimento ad esso.
Distruttori. Una classe potrà finalmente avere un distruttore, cioè un metodo che viene chiamato automaticamente prima della deallocazione di una istanza. Il metodo da usare come distruttore dovrà obbligatoriamente chiamarsi __destruct().
Le altre novità
Tra le novità di Zend 2 ve ne sono altre di grande interesse che non discendono dal nuovo modello ad oggetti.
La più rilevante è sicuramente la possibilità di gestire le eccezioni, in modo simile a quanto avviene in Java ed altri linguaggi. I costrutti sintattici sono i classici try, throw e catch. Il primo viene utilizzato per racchiudere un insieme di istruzioni considerate “a rischio di eccezione”; se in tale blocco viene sollevata, con il costrutto throw, una eccezione, questa viene intercettata e gestita dal blocco catch più vicino. Il meccanismo delle eccezioni risulta particolarmente conveniente in quanto solleva il programmatore dalla fastidiosa necessità di gestire le possibili situazioni di errore istruzione per istruzione.
Altre due novità che dovrebbero essere introdotte con Zend 2.0 (in questo caso, tuttavia, sembra che il team di sviluppo non abbia ancora preso decisioni definitive) sono l’ereditarietà multipla e le variabili private. La prima consiste nella possibilità di creare una classe ereditando funzionalità da più classi; attualmente è supportata solo l’ereditarietà singola (per cui una classe può estendere un’unica classe “madre”). La seconda novità riguarda la possibilità di dichiarare private delle variabili interne ad una classe (variabili membro, nel gergo dell’OOP), rendendole inaccessibili dall’esterno della classe stessa.
Conclusioni
In definitiva le nuove caratteristiche di Zend dovrebbero rendere PHP un linguaggio più credibile per lo sviluppo di applicazioni web, ponendo rimedio (sia pure parzialmente) ad alcune gravi lacune che affliggono la versione attuale. Incrociamo le dita.