Nonostante PHP 4 sia "quasi" perfetto per lo sviluppo di semplici applicazioni web: trattamento di form, connessioni a database etc..., ci sono alcune limitazioni che si incontrano soprattutto nell'utilizzo di PHP in applicazioni complesse, in particolare la versione di OOP (object-oriented programming) è carente di molte funzionalità proprie dei linguaggi di questo tipo (uno per tutti: Java), l'estensione per MySQL non supporta il nuovo protocollo client di MySQL 4.1 e il supporto a XML è quantomeno non adeguato.
PHP 5 è andato a migliorare la versione precedente proprio in questi punti "deboli" dato che sono state completamente riscritti i componenti relativi a:
- Programmazione ad Oggetti
- MySQL: grazie alla nuova MySQLi (MySQL Improved extensions) viene offerta la possibilità di utilizzare una connessione SSL verso il server, di gestire query già preparate con parametri collegati ottimizzandone quindi l'esecuzione. Infine viene offerta una nuova interfaccia OO a MySQL.
- XML: il fine di queste nuove implementazioni è quello di garantire una interoperabilità tra le varie estensioni piuttosto che utilizzare diversi agent per ognuna di esse. Il supporto a DOM (Document Object Model) consente di considerare questa specifica come un API (application Programming Interface) indipendente dal linguaggio di programmazione. Viene fornita inoltre una nuova estensione XSLT (Extensibile Stylesheet Language Transformation) che permette di convertire dati XML e oggetti DOM in documenti tramite l'utilizzo di stylesheets. Oltre a ciò è stata introdotta la possibilità di estrarre in modo molto semplice le informazioni da documenti XML di cui si conoscano le specifiche tramite la nuova estensione SimpleXML
Le altre novità maggiori sono sicuramente:
- la gestione di un database totalmente embedded: SQLite. Nonostante il nome faccia pensare ad un database con funzionalità ridotte, SQLite, oltre a permettere di gestire dati senza ulteriori installazioni, offre supporto a transazioni, subquery, trigger e altre funzionalità avanzate.
- gli iteratori. Raggruppati nella SPL (Standard PHP Library) permettono di ciclare tramite istruzioni foreach su diversi tipi di dato come elenchi di file, risultati di query e anche documenti XML
- la gestione degli errori tramite eccezioni (exception handling). Questo permette, come già avviene in altri linguaggi come Java o C++, di separare completamente la gestione degli errori dalla logica del programma
- la gestione di stream, filtri e wrapper come interfaccia di lettura e scrittura su file.
- il supporto a SOAP sia per la creazione di web service che come client per web services già esistenti
- e infine Tidy: un'estensione che permette di validare il codice HTML o XHTML generato come output.
Ho notato che PEAR ("PHP Extension and Application Repository") non è di così immediato utilizzo, così ecco un' articolo su come utilizzarlo..
innanzitutto se avete un php > 4.3.0 non avete nulla da installare. Vi basta cercare sul sito di riferimento (http://pear.php.net) il package di cui avete bisogno, per poi installarlo con il comando install. Per esempio per installare il package HTTP_Request useremo la seguente sintassi:
root@slack#pear install HTTP_Request
Did not download dependencies: pear/Net_URL, pear/Net_Socket, use --alldeps or --onlyreqdeps to download automatically
pear/HTTP_Request requires package "pear/Net_URL" (version >= 1.0.12)
pear/HTTP_Request requires package "pear/Net_Socket" (version >= 1.0.2)
No valid packages found
install failed
In questo caso mancano delle dipendenze, quindi si rivela necessario l'utilizzo del flag --alldeps (come suggerito da PEAR stesso)
root@slack# pear install --alldeps HTTP_Request
downloading HTTP_Request-1.3.0.tgz ...
Starting to download HTTP_Request-1.3.0.tgz (13,808 bytes)
.....done: 13,808 bytes
downloading Net_URL-1.0.14.tgz ...
Starting to download Net_URL-1.0.14.tgz (5,173 bytes)
...done: 5,173 bytes
downloading Net_Socket-1.0.6.tgz ...
Starting to download Net_Socket-1.0.6.tgz (4,623 bytes)
...done: 4,623 bytes
install ok: channel://pear.php.net/Net_Socket-1.0.6
install ok: channel://pear.php.net/Net_URL-1.0.14
install ok: channel://pear.php.net/HTTP_Request-1.3.0
Per aggiornarlo, quando viene rilasciata una nuova versione, scriveremo:
root@slack#pear upgrade HTTP_Request
Per aggiornare tutti i package installati userermo:
root@slack#pear upgrade all
Per conoscere l'elenco dei package installati:
root@slack# pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.1 stable
Console_Getopt 1.2 stable
DB 1.7.6 stable
HTML_AJAX 0.4.1 alpha
HTML_Template_IT 1.1.4 stable
HTTP 1.4.0 stable
HTTP_Request 1.3.0 stable
Mail 1.1.10 stable
Net_SMTP 1.2.8 stable
Net_Socket 1.0.6 stable
Net_URL 1.0.14 stable
PEAR 1.4.10 stable
XML_Parser 1.2.7 stable
XML_RPC 1.5.0 stable
Vediamo infile l'utilizzo da Php delle classi messe a disposizione da PEAR, continuo con l'esempio di HTTP_Request, la quale permetti di simulare richieste HTTP (POST e GET) via codice e restituisce il relativo output:
<?php
require_once "HTTP/Request.php";
$req =& new HTTP_Request("http://www.google.it/");
if (!PEAR::isError($req->sendRequest())) {
echo $req->getResponseBody();
} else {
$response1 = "no response";
}
echo $response1;
?>
L'esempio è molto semplice, rimando alla documentazione del package per ulteriori complicazioni.
Concludendo PEAR è una collezione di package molto utile, che evita di dover reinventare la ruota ogni volta. Prima di scrivere qualsiasi tipo di codice il mio consiglio è di spendere 10min. a vedere se qualcuno (probabilmente più preparato di noi) non lo abbia già fatto.