PHP5 nouveautés et enjeux  

PHP 5 est disponible depuis maintenant un an. Qu'en est il ?

Les changements par rapport à PHP 4 sont très importants, il ne s'agit pas d'une simple mise à jour mais d'une refonte complète du moteur. Au menu des principales nouveautés :

  • Simplification de l’utilisation d’XML, notamment avec simplexml;
  • Support objet complet;
  • Intégration d’une mini base de données embarquée : SQLite.

Historique de PHP

Le langage PHP date de 95 il servait alors uniquement de système de gabarits pour pages Web. La version 3 amène en 98 un vrai moteur de script tout à fait fonctionnel qui gagne vite une forte communauté. En 2000 le moteur voit arriver une nouvelle version, PHP 4. Les performances sont au rendez-vous et la modularité permet l’apparition d’extensions pour gérer tout ce qui peut l’être, de la connexion LDAP jusqu’aux interfaces GTK, en passant par la correction orthographique. La venue de PHP5 amène de grandes nouveautés pour un outil qui se veut à double emploi : facile et utilisable pour des applications simples à destination d’un large public, performant et puissant pour des applications métiers à destination d’un public professionnel.

Installer PHP5

L’installation de PHP5 n’a rien de compliquée et reste en tout point similaire à celle de PHP4. Il vous suffit de suivre le fichier install.txt fourni avec la distribution pour que tout fonctionne correctement, seul le nom du module et les dll ont changé de nom (4 devient 5). Pour les impatients qui n’ont pas envie de trifouiller leur serveur, il est possible d’installer des packages complets, notamment sur Windows. WAMP5 (un projet PHPteam) vous permettra, par exemple, d’installer Apache, MySQL, PHP5 et d’autres utilitaires sur votre Windows. Son gestionnaire de services installé dans la barre des tâches vous permettra de facilement contrôler votre serveur. Des add-ons sont disponibles pour WAMP5, je pense notamment à l'add-on PHP4 permettant d'ajouter PHP 4.3.8 sur votre serveur (en complément de PHP5) et de basculer en quelques secondes de l’un à l’autre. Cette fonctionnalité vous aidera à évaluer les difficultés rencontrées lors de vos migrations.

Image

Simplification de l'utilisation de XML

L'interaction de PHP avec XML a été une des préoccupations de PHP 5. Outre une refonte du moteur DOM, on voit apparaître un nouveau moteur : Simple XML.

Via l'API DOM vous pouvez, à partir d'un document XML, créer une arborescence d'objets, les manipuler, les déplacer, modifier ou récupérer des valeurs d'un document XML, etc. ; mais cela implique un code souvent complexe. L'extension Simple XML va vous permettre de lire des valeurs dans un fichier XML quasiment sans coups férir.

Prenons un fichier XML (très) simple :

Fichier XML (très) simple
  1. <?xml version="1.0"?>
  2. <population>
  3.     <individu>
  4.         <prenom>nicolas</prenom>
  5.         <nom>sulpice</nom>
  6.         <email> test@phpteam.netCet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir </email>
  7.     </individu>
  8.     <individu>
  9.         <prenom>georges</prenom>
  10.         <nom>pierre</nom>
  11.         <email> gp@photo.netCet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir </email>
  12.     </individu>
  13. </population>

 

Avec PHP5 pour l'interpreter il suffira de faire :

Code PHP
  1. <?php
  2. $population = simplexml_load_file('individu.xml');
  3.  
  4. foreach($population->individu as $individu) {
  5.     echo 'Prénom : ' ,$individu->prenom.'<br />';
  6.     echo 'Nom : ' ,$individu->nom.'<br />';
  7.     echo 'Email : ' , $individu->email.'<br /><br />'
  8. }
  9. ?>
Prénom : nicolas
Nom : sulpice
Email :
<script language='JavaScript' type='text/javascript'>
<!--
var prefix = '&#109;a' + 'i&#108;' + '&#116;o';
var path = 'hr' + 'ef' + '=';
var addy5946 = 't&#101;st' + '&#64;';
addy5946 = addy5946 + 'phpt&#101;&#97;m' + '&#46;' + 'n&#101;t';
document.write( '<a ' + path + '\'' + prefix + ':' + addy5946 + '\'>' );
document.write( addy5946 );
document.write( '<\/a>' );
//-->\n </script><script language='JavaScript' type='text/javascript'>
<!--
document.write( '<span style=\'display: none;\'>' );
//-->
</script>Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir
<script language='JavaScript' type='text/javascript'>
<!--
document.write( '</' );
document.write( 'span>' );
//-->
</script>
 
Prénom : georges
Nom : pierre
Email :
<script language='JavaScript' type='text/javascript'>
<!--
var prefix = '&#109;a' + 'i&#108;' + '&#116;o';
var path = 'hr' + 'ef' + '=';
var addy5640 = 'gp' + '&#64;';
addy5640 = addy5640 + 'ph&#111;t&#111;' + '&#46;' + 'n&#101;t';
document.write( '<a ' + path + '\'' + prefix + ':' + addy5640 + '\'>' );
document.write( addy5640 );
document.write( '<\/a>' );
//-->\n </script><script language='JavaScript' type='text/javascript'>
<!--
document.write( '<span style=\'display: none;\'>' );
//-->
</script>Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir
<script language='JavaScript' type='text/javascript'>
<!--
document.write( '</' );
document.write( 'span>' );
//-->
</script>

SimpleXML est un module qui vous permettra de manipuler très facilement des documents XML peu complexes. L'exemple le plus flagrant de différence de complexité pourra se voir entre un traitement DOM d'un fichier RSS et un traitement via SimpleXML.

[Pour en savoir plus sur SimpleXML consultez le chapitre gratuit du livre PHP 5 avancé édition Eyrolles]

Intégration de SQLite

SQLite est la dernière base de données dont le support a été ajouté dans PHP. Elle a été propulsée à l'avant scène avec PHP 5 suite aux difficultés de licence de MySQL. Son atout principal est de proposer un moteur SQL (ANSI 92) complet ou presque sans avoir recours à un système client/serveur. Cela veut dire que SQLite stocke et lit les données directement dans des fichiers locaux. Dans la mesure ou PHP 5 intègre le moteur SQLite par défaut, vous pouvez faire du SQL immédiatement sans vous préoccuper de savoir si un serveur de base de données est installée ou non sur la machine.

Les applications PHP qui seront bâties sur ce moteur ne dépendent plus que de la configuration de PHP, et de l'accès en écriture au système de fichiers. Contrairement à MySQL ou à Oracle, il n'y a pas besoin de serveur fonctionnant de manière indépendante. Voila qui va simplifier le déploiement des applications basées sur SQLite. PHP/GTK est également particulièrement concerné par cette nouveauté car vos applications seront alors réellement autonomes :ni serveur Web, ni SGBD.

Quelques spécificités de SQLite

  • Gestion des requêtes imbriquées, des déclencheurs, des transactions et des vues (en lecture seulement).
  • Très rapide ( estimé à 2-3 fois plus rapide que MySQL pour des requêtes avec une faible concurrence).
  • Grande capacité de stockage de données ( jusqu'à 2 Téraoctets).
  • Pas de contrainte d’intégrité sur les clefs étrangères.
  • Possibilité d'utiliser des fonctions PHP dans vos requêtes SQL (UDF).
  • Moins bonne gestion en cas d'accès concurrents en écriture (verrou mis sur la base dans son intégralité).
  • Les sources font parties du domaine public et sont donc modifiables à volonté

Exemple simple
  1. <?php
  2. //Ouverture de la base :
  3. $db = sqlite_open('foo.db');
  4. //Création de la requête :
  5. $sql = 'SELECT nom, prenom from individu';
  6.  
  7. //Execution de la requête :
  8. $result = sqlite_query($db, $sql    );
  9.  
  10. while ($row = sqlite_fetch_array($result)){
  11.     print_r($row);
  12. }
  13. //Fermeture de la base :
  14. sqlite_close($db);
  15. ?>

SQLite est une base de données très pratique qui pourra remplacer MySQL dans de nombreux cas.

Limitations de SQLite

Malgré toutes ces informations plutôt positives sur SQLite il faut également en voir les différentes limitations. La première concerne le lock des tables. Des verrouillages sur la base sont faits quand un des accès est fait en écriture.
Ce verrouillage se fait au niveau du fichier, c’est donc toute la base de données qui est verrouillée et inaccessible aux autres accès. Attention donc car SQLite n'est pas adapté en cas d'applications tres concurrentielles.

Un autre point a prendre en compte concerne les performances de SQLite qui sont bonnes mais qui nécessitent d'utiliser des transactions. Sinon le fichier est ouvert et fermé a chaque requête et les performances en pâtissent.

Dernier point à prendre en compte il est conseillé d’utiliser des systèmes de fichiers disposant de verrouillage de fichier stable. Exclure donc NFS, Win 95 /98 / Me.

La Programmation Orientée Objet

Le nouveau modèle objet est probablement le changement le plus important. Le but n’est pas de faire un autre Java mais vous retrouverez la plupart des repères habituels des langages orientés objets.

PHP 4 n’avait qu’une démarche objet très réduite : il était possible de définir des classes contenant des propriétés et des méthodes. Les classes permettaient l’utilisation d’un constructeur, l’héritage simple et l’appel de méthodes de manière statique. Aucun principe d’héritage multiple ou d’interface n’était disponible ni aucun destructeur ou mécanisme de sûreté. En outre un gros reproche fait aux objets de PHP 4 est qu’ils sont par défaut passés par valeurs et non par références (il fallait utiliser l’opérateur & pour faire une référence).

Voici une liste non exhaustive des changements :

  • Les objets supportent un constructeur et un destructeur.
Auparavant seuls le constructeur existait. Le constructeur gagne de plus une syntaxe plus cohérente grâce au préfixe réservé « __ ». Les méthodes utilisées sont __construct() et __destruct().
Fichier XML (très) simple
  1. <?php
  2. class foo {
  3.     function __construct() {
  4.         echo 'objet créé' ;
  5.     }
  6.     function __destruct() {
  7.         echo 'objet détruit' ;
  8.     }
  9. }
  10. ?>
  • Les objets sont passés par références par défaut.

Dans PHP 4 les objets étaient passés par valeurs et il fallait utiliser le préfixe & pour utiliser les références, ce qui pouvait se retrouver complexe à gérer. Dans PHP 5 les objets sont passés par référence par défaut.

Fichier XML (très) simple
  1. <?php
  2. $source->value = 1 ;
  3. $ref = $source ;
  4. $ref->value = 2 ;
  5. echo $source->value ; // affiche 2 dans PHP5 et 1 dans PHP4
  6.  
  7. //Le mot clé clone permet de copier explicitement un objet et ses valeurs.
  8. $source->value = 1 ;
  9. $copy = clone $source;
  10. $copy->value = 2 ;
  11. echo $source->value ; // affiche 1
  12. ?>
  • Dé-référencement des objets

Il est possible d’utiliser directement un objet retourné par une fonction. Ainsi il est possible de faire fonction()->méthode() si la fonction retourne un objet.

  • Sûreté de programmation

Il est désormais possible de rajouter des contrôles d'accès aux méthodes et propriétés des classes, les mots clés comme private, public ou protected bien connus des programmeurs objets font leur apparition. D'autres contrôles sont possibles avec l'apparition des interfaces et classes abstraites, qui forcent une classe à respecter un certain schéma.

  • Exceptions

C’est une des très grosses arrivées dans PHP 5. Les mécanismes habituels de try() et catch() pourront être utilisés. Les Exceptions pourront être des objets dérivant de la classe « Exception ». Il s’agit de l’avènement d’une gestion d’erreur complète dans le langage.

Conclusion

Rasmus disait récemment, et à forte raison, "PHP5 n'est pas une révolution mais une évolution". Effectivement PHP5 ne va pas forcément chambouler vos habitudes de développement mais vous apportera un réel confort de développement supplémentaire. La programmation orientée objet de PHP5 n'a plus énormément à envier aux autres langages. XML devient simple grâce à SimpleXML. Une nouvelle base de données fait son apparition et de nombreuses fonctions apparaissent pour vous faciliter la vie. Bref ce n'est pas une révolution mais une rudement belle évolution.

Les auteurs

Eric DASPET et Cyril PIERRE de GEYER ont travaillé pendant plus d’un an à l’élaboration d’un livre sur PHP5 aux éditions Eyrolles : « PHP5 avancé».

Image

 


Retour à l'accueil des articles