Les nouveautés de PHP 5.3

Et comment migrer de PHP 5.2 vers PHP 5.3


précédentsommaire

V. Migation depuis PHP 5.2

Cette section est une traduction de : http://www.ibm.com/developerworks/opensource/library/os-php-5.3new5/

V-A. Introduction

Dans cette dernière partie de la série, nous voyons les éléments à prendre en considération lors de la migration depuis PHP 5.2. Ce sont des modifications qui cassent la compatibilité avec le code existant ainsi que des fonctionnalités déconseillées dans PHP 5.3 et pour suppression dans des versions ultérieures. Certaines améliorations de PHP sont également abordées.

Cette série s'est concentrée sur les nouvelles fonctionnalités de PHP 5.3 telles que les espaces de noms, les fermetures, la gestion des objets, la programmation orientée objets et Phar. Tandis que ces nouvelles fonctionnalités étincelantes sont un ajout attrayant pour le langage, PHP 5.3 a également été conçu pour mieux aligner PHP sur les autres langages. Cette version étoffe la version populaire et stable, PHP 5.2, et améliore le langage pour le rendre plus puissant. Dans cet article, nous voyons les modifications et les considérations à évaluer lors de la mise à jour depuis 5.2.

V-B. Changements syntaxiques

Des ajouts au langage, comme les espaces de noms et les fermetures (cf. parties II et III), ont ajouté des mots réservés supplémentaires. Depuis PHP 5.3, namespace ne peut plus être utilisé comme identifiant. La classe Closure est désormais une classe réservée mais c'est encore un identifiant valide. Le Listing 1 montre des exemples d'instructions qui ne fonctionnent plus en PHP 5.3 à cause des mots réservés supplémentaires.

Listing 1. Instructions PHP incorrectes
Sélectionnez
// la définition suivante de fonction lance une erreur fatale PHP 5.3,
// alors qu'elle est parfaitement valide en PHP 5.2
function namespace() 
{
....
}

// de même avec la définition de cette classe
class Closure
{
....
}

Le support de l'instruction goto a également été ajouté en PHP 5.3. Désormais, goto est un mot réservé. Les instructions goto ne sont pas fréquentes dans les langages modernes (vous vous souvenez probablement de les avoir utilisées en BASIC) mais il y a occasionnellement des situations dans lesquelles elles sont utiles. Le Listing 2 montre un exemple de leur fonctionnement.

Listing 2. L'instruction goto en PHP
Sélectionnez
echo "Ce texte est affiché";
goto a;

echo "Ce texte est évité";

a:
echo "Ce texte est affiché";

Un cas d'utilisation possible de l'instruction goto est de sortir de boucles et de conditionnelles à forte imbrication. Cela rend le code bien plus facile à lire.

V-C. Modifications aux fonctions et méthodes

Bien qu'il n'y ait pas de modifications majeures aux fonctions et aux méthodes en PHP 5.3, il y a quelques améliorations pour aider avec des problèmes connus de PHP et pour améliorer les performances. Cette section présente quelques-uns des changements les plus remarquables.

Dans les versions précédentes de PHP, les fonctions de tableaux atsort, natcasesort, usort, uasort, uksort, array_flip et array_unique acceptent des objets en paramètres à la place de tableaux. Ce n'est plus possible en PHP 5.3, vous devez ainsi convertir d'abord les objets en tableaux. Le Listing 3 montre comment modifier votre code.

Listing 3. Modifier le code pour convertir les objets en tableaux pour certaines fonctions
Sélectionnez
$obj = new stdClass;
$obj->a = '1';
$obj->b = '2';
$obj->c = '3';

print_r(array_flip($obj)); // fonctionne en PHP 5.2 mais PAS en PHP 5.3

print_r(array_flip((array) $obj)); // fonctionne en PHP 5.2 et 5.3
Les méthodes magiques de classes sont désormais bien plus strictes. Les méthodes suivantes doivent avoir une visibilité publique :
  • __get
  • __set
  • __isset
  • __unset
  • __call

Comme contournement de cette modification, vous pouvez utiliser la nouvelle méthode magique __callStatic() dans les situations où __call() était utilisée en contexte statique. Les arguments obligatoires de ces méthodes sont renforcés et ils doivent être présents, à l'exception de la méthode magique __toString() qui n'accepte aucun paramètre. Le Listing 4 montre comment utiliser ces méthodes ainsi que leurs paramètres obligatoires.

Listing 4. Utiliser les méthodes magiques
Sélectionnez
class Foo
{
    public function __get($clef) {} // doit être publique et avoir un paramètre
    public function __set($clef, $val) {} // doit être publique et avoir deux paramètres
    public function __toString() {} // doit être publique et ne pas avoir de paramètre
}

Plusieurs fonctions qui n'étaient jusque-là pas supportées par PHP sous Windows sont présentes depuis PHP 5.3. Par exemple, la fonction getopt() est conçue pour traiter les options en vue d'appeler un script en ligne de commande. Les fonctions d'encodage et de décodage des adresses Internet, inet_ntop() et inet_pton(), fonctionnent également sous Windows, ainsi que certaines fonctions mathématiques comme asinh(), acosh(), atanh(), loglp() et expml().

V-D. Modifications d'extensions

La bibliothèque C d'extensions PHP (PECL – PHP Extension C Library) a été le lieu d'élevage de nouvelles extensions en PHP. Lorsqu'une extension est mature, stable et qu'elle est perçue comme une fonction utile en tant que part de la distribution noyau, elle est souvent ajoutée au moment d'une version majeure. Dans cette optique, à partir de PHP 5.3, les extensions suivantes font désormais partie de la distribution standard de PHP :

FileInfo Donne des fonctions qui aident à la détection du type de contenu et à l'encodage d'un fichier en étudiant certaines séquences de caractères magiques dans le fichier.
Intl Une interface de programmation autour de la bibliothèque ICU (International Components for Unicode), des fonctions pour le support d'Unicode et de globalisation.
Phar Un outil d'archivage PHP étudié en section IV.
mysqlnd Un pilote natif PHP pour avoir accès aux bases de données MySQL, c'est un remplacement de l'extension précédente pour MySQL et MySQLi qui utilisait la bibliothèque libmysql.
SQLite3 Une bibliothèque pour utiliser les bases de données SQLite v3.

Lorsqu'une extension n'est plus maintenue, ou lorsqu'il est jugé qu'elle ne mérite plus de faire partie de la distribution noyau de PHP, il arrive qu'elle soit déplacée vers PECL. Lors des remaniements pour PHP 5.3, les extensions suivantes ont été enlevées de la distribution standard de PHP et elles sont désormais maintenues par PECL :

ncurses Une émulation de curses, qui est utilisée pour afficher des éléments visuels dans la console.
fpdf Permet la construction et l'utilisation de formulaires ainsi que de données de formulaires dans des documents PDF.
dbase Permet d'écrire et de lire des fichiers compatibles avec le format dbase.
fbsql Permet l'accès à des bases de données sur serveurs Frontbase.
ming Une bibliothèque open source qui permet de créer des animations Flash 4.

L'extension Sybase a été supprimée entièrement, elle est maintenant remplacée par l'extension sybase_ct. Cette dernière est entièrement compatible avec l'extension antérieure, elle est prévue pour constituer un remplacement transparent. La nouvelle fonction utilisera les bibliothèques clientes de Sybase qu'il faut installer sur le serveur Web.

V-E. Modifications de compilation

Avec les efforts conséquents associés au perfectionnement de la procédure de compilation de PHP 5.3, il est plus facile de compiler PHP sur toutes les plateformes. Afin de maintenir la cohésion entre les compilations de PHP et de fournir un ensemble garanti de composants dans PHP, les extensions PCRE, Réflexion et la SPL ne peuvent plus être désactivées de la compilation. Vous pouvez développer des applications qui utilisent ces extensions avec l'assurance qu'elles seront disponibles.

L'an dernier, une nouvelle équipe a pris en charge la compilation de PHP pour Windows. À partir de PHP 5.3, l'équipe donnera diverses améliorations aux utilisateurs de Windows. Les nouvelles compilations cibleront l'architecture 586 (Intel® Pentium® ou ultérieur) et nécessitent Windows 2000/XP ou ultérieur, supprimant ainsi le support de Windows 98/NT et antérieurs. PHP sera compilé avec Microsoft® Visual Studio® 2008 et pour des architectures x86-64 bits. Cela donne des améliorations de performances en travaillant avec FastCGI sur le serveur Web Microsoft IIS ou avec Apache compilé avec le même compilateur et pour la même architecture. L'installateur pour Windows est également amélioré afin de mieux configurer PHP avec le serveur Web Microsoft IIS. L'équipe a lancé un nouveau site spécifique à PHP pour Windows.

V-F. Modifications .ini

Une fonctionnalité importante de PHP est que son comportement peut être configuré au moyen d'un fichier .ini. Dans PHP 5.3, certaines directives problématiques de ce fichier ont été supprimées, telles que le paramètre zend.ze1_compatibility_mode. Vous avez désormais bien plus de latitude à l'utilisation de ce fichier.

Il y a deux améliorations majeures au fichier php.ini :
  • Vous pouvez avoir des variables dans le fichier php.ini. C'est très pratique pour supprimer la redondance dans le fichier, et il devient plus facile de mettre à jour le fichier si des modifications sont nécessaires. Le Listing 5 en montre un exemple.
  • Vous pouvez faire des configurations php.ini par site ou par répertoire, de manière analogue à ce qu'il se fait avec les fichiers de configuration Apache. L'avantage ici est que la syntaxe devient cohérente à travers toutes les SAPIs différentes qui permettent d'exécuter PHP. Le Listing 6 montre comment cela fonctionne.
Listing 5. Des variables dans le fichier php.ini
Sélectionnez
foo = bar 

[section] 
newfoo = ${foo} 
; foo et newfoo ont la même valeur.
Listing 6. Configuration .ini par site ou par répertoire
Sélectionnez
[PATH=/var/www/site1] 

; les directives de cette section sont valables uniquement pour les fichiers PHP sous le répertoire /var/www/site1

[HOST=www.example.com] 

; les directives de cette section sont valables uniquement pour des fichiers PHP demandés depuis le site www.example.com.

Vous pouvez également créer ces directives .ini dans un fichier spécifique à un utilisateur, dans le système de fichiers lui-même, de la même manière que vous le feriez avec le serveur Web Apache HTTP. Le nom par défaut de ce fichier est précisé par la directive user_ini.filename. La fonctionnalité peut être désactivée en donnant une valeur vide à cette directive. Toute directive par site ou par répertoire peut être surchargée dans un fichier .ini de l'utilisateur.

[NDT : Cette nouvelle fonctionnalité n'est disponible que pour PHP en tant que CGI ou FastCGI, pas en tant que module d'Apache.]

V-G. Éléments marqués pour suppression (deprecated)

PHP 5.3 commence officiellement à déconseiller l'utilisation d'anciennes fonctions qui ne seront plus disponibles dans de prochaines versions de PHP. Lorsque vous utiliserez ces fonctions, une erreur E_DEPRECATED sera émise. Les fonctions suivantes sont déconseillées en PHP 5.3 :

  • Ticks (declare(ticks=N) et register_tick_function()), qui étaient conçus pour lancer un appel de fonction toutes les N instructions exécutées par l'interpréteur dans le bloc declare(). Ils sont retirés à cause de nombreux problèmes dans leur fonctionnement et car la fonctionnalité n'est pas utilisée très souvent.
  • define_syslog_variables(), qui initialise toutes les variables en relation avec le journal système. Cette fonction n'est pas requise car les constantes qu'elle définit sont déjà définies globalement. Le retrait de cet appel de fonction devrait être le seul effort nécessaire.
  • Les fonctions d'expressions régulières ereg. Il est recommandé d'utiliser les fonctions d'expressions régulières PCRE à la place, dans la mesure où elles sont bien plus rapides et plus homogènes avec les expressions régulières utilisées dans d'autres langages et applications. Le support des fonctions ereg est supprimé afin que PHP puisse être standardisé avec un seul moteur d'expressions régulières.

Il est recommandé de prévoir de vous défaire de ces fonctions en PHP 5.3. Les versions ultérieures de PHP retireront le support des éléments ci-dessus.

[NDT : Les modes E_DEPRECATED et E_USER_DEPRECATED ont été ajoutés en PHP 5.3.]

V-H. Conclusion

PHP 5.3 a de nombreuses nouvelles fonctionnalités et a « nettoyé » divers éléments. Il y a certains problèmes d'incompatibilité avec l'ancienne syntaxe. Cet article donne des conseils pour migrer votre application Web vers PHP 5.3. Pour les derniers détails sur PHP 5.3, veuillez vous rendre sur le Wiki PHP, qui comporte des remarques sur tout autre changement pouvant affecter votre application.

[NDT : Je remercie ram-000, Julien Pauli et metagoto pour leur relecture attentive, ainsi que les contributeurs du forum qui n'ont pas attendu pour me faire corriger l'article en fonction des dernires évolutions de PHP 5.3 : 13 commentaires Donner une note à l'article (5)]


précédentsommaire

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 John Mertic et Guillaume Rossolini. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.