URL: https://linuxfr.org/news/sortie-de-php-5-4 Title: Sortie de PHP 5.4 Authors: Laurent J baud123, Nÿco, olivierweb, Anonyme, Bruno Michel, GeneralZod, beckbeckbondieu, Benoît Sibaud et detail_pratique Date: 2012年02月09日T13:59:12+01:00 License: CC By-SA Tags: php, php54 et postgresql Score: 42 Une nouvelle version majeure de PHP vient de sortir, après de nombreuses RC (_Release Candidate_) : PHP 5.4. Les principales améliorations sont : * Une nouveauté grammaticale : les "traits" (en anglais) * Nouvelle syntaxe courte pour les tableaux, inspirée de celle de Javascript * Un serveur web intégré pour faciliter le développement * PHP-FPM (FastCGI Process Manager) a été amélioré et n'est plus marqué expérimental * Un grand nettoyage dans les options de configuration : en particulier, les magic quotes, register_globals et le safe mode ont totalement disparu * Et de manière générale, une amélioration des performances et de l'utilisation de la mémoire En outre, durant le développement de cette version 5.4, la gestion du projet s'est grandement améliorée, avec un passage à Git et un processus de décision plus communautaire. Plus de détails en seconde partie. _Merci à Nÿco, olivierweb, detail_pratique, baud123, Bruno Michel, GeneralZod, beckbeckbondieu, et Stéphane Aulery pour leur participation à la rédaction de cet article._ ---- [Téléchargement](http://www.php.net/downloads.php) [La news sur php.net](http://www.php.net/archive/2012.php#id2012-03-01-1) [Les détails des changements](http://www.php.net/ChangeLog-5.php#5.4.0) [Blog de F. Hardy, publiant des billets détaillés sur les évolutions de PHP](http://blog.mageekbox.net/?category/PHP-X) ---- # Traits # Les traits sont un moyen de réutiliser du code à l'intérieur des classes. On définit ainsi des méthodes dans un "trait", et on indique dans les classes que l'on veut inclure ce "trait". Cela n'a pas de rapport avec l'héritage. En effet, les traits sont résolus durant la décomposition analytique du code (_parsing_ en anglais), pas à l'exécution. De manière imagée, le moteur PHP se contente de copier le contenu d'un trait et de le coller à l'intérieur d'une classe avant son interprétation. Cette fonctionnalité permet de surmonter les situations lorsque l'héritage multiple est nécessaire. Exemple simple : ```php 'orange', 'pomme' => 'apple', 'citron' => 'lemon']; ``` En outre, la gestion du déréférencement des tableaux a été ajoutée. On peut ainsi écrire : ```php bar()` * Nouveau mot clé `callable` pour typer un argument qui serait une fonction de callback (typehint). * `E_ALL` contient maintenant par défaut le niveau E_STRICT. * La configuration `short_open_tag` n'est plus utilisée, et la syntaxe `=` est maintenant toujours utilisable. # Serveur web embarqué # La version en ligne de commande de PHP embarque un serveur web. Il est destiné uniquement aux développeurs, afin d'éviter à avoir à configurer un serveur web pour tester une application. Il n'est pas conçu pour être mis sur un serveur en production. Pour lancer le serveur web, il suffit de se placer dans le répertoire du site (ou indiquer son chemin avec le paramètre ```-t```), et de lancer ```php``` avec le paramètre ```-S``` en indiquant l'IP et le numéro de port. ```bash $ cd ~/public_html $ php -S localhost:8000 ``` On peut aussi indiquer un script PHP qui fera le "routage". Pour plus d'informations, voyez [la documentation dédiée au serveur embarqué](http://www.php.net/manual/fr/features.commandline.webserver.php). # PHP-FPM # PHP propose depuis la version 5.3 une alternative aux implémentations de FastCGI dans les serveurs web : PHP FastCGI Process Manager. Mais jusqu'à maintenant, c'était expérimental. Dans la version 5.4, ça ne l'est plus et pas mal d'améliorations internes ont été apportées. Cette implémentation de fastcgi pour PHP apporte quelques avantages. Notamment (en [reprenant la documentation](http://fr.php.net/manual/fr/install.fpm.php)) : * Gestion avancée des processus avec stop/start "doux". * Possibilité de démarrer des processus avec différents `uid/gid/chroot/environment`, écoutant sur différents ports et utilisant différents `php.ini` (remplace le `safe_mode`). * Redémarrage d'urgence en cas de destruction accidentelle du cache opcode. * Gestion du téléchargement accéléré. * Journalisation améliorée. # Disparition de fonctionnalités obsolètes # Cette version 5.4 a subi un grand nettoyage. Des fonctionnalités qui avaient été marquées obsolètes dans les versions précédentes ont été définitivement supprimées, ce qui améliore dans certains cas la sécurité des scripts et facilite l'administration. Ainsi ont disparu : * Le "safe mode", qui n'apportait pas tellement plus de sécurité et complexifiait la tâche des administrateurs et des développeurs. PHP-FPM apporte une alternative plus sérieuse à cet ancien mode de fonctionnement * Les variables globales issues des paramètres de requêtes (`register_globals`, `register_long_arrays`) * Les "magic quotes" (`magic_quotes_gpc`, `magic_quotes_runtime` et `magic_quotes_sybase`). Cependant, les fonctions `get_magic_quotes_gpc`, `get_magic_quotes_runtime` et `set_magic_quotes_runtime` sont toujours là, mais ne font plus rien. Mais aussi : * On ne peut plus passer des arguments en forçant le passage par référence (`allow_call_time_pass_reference`) * Disparition des fonctions `session_is_registered()`, `session_registered()`, et `session_unregister()` * Disparition des options de configuration `y2k_compliance`, `session.bug_compat_42` et `session.bug_compat_warn` * L'extension sqlite (API pour Sqlite 2) ne fait plus partie des sources, et a été déplacée dans le dépôt PECL. Cependant, l'API Sqlite 3 est toujours là bien sûr. # Améliorations diverses # * Le fuseau horaire n'est plus "deviné" quand il n'est pas configurée. Par défaut le fuseau UTC est utilisé. (en clair, PHP ne râle plus quand on a oublié d'appeler `date_default_timezone_set` avant de manipuler les dates). * Nouvelle variable `$_SERVER['REQUEST_TIME_FLOAT']`, qui est l'équivalent de `$_SERVER['REQUEST_TIME']`, mais avec une précision à la microseconde. * Pas mal d'améliorations pour l'environnement Windows. * Prise en charge de DTrace pour le débuggage de PHP. Et puis bien sûr, des bogues ont été corrigés et des petites améliorations apportées dans bon nombre d'extensions : * Les extensions mysql, mysqli et pdo_mysql utilisent maintenant la bibliothèque native d'accès à MySQL mysqlnd, au lieu de la bibliothèque officielle de MySQL. * Ajout du support de Tokyo Cabinet et de Berkeley DB 5 dans l'extension DBA (qui est une couche d'abstraction d'accès aux bases de données NoSQL de type clé/valeur) * L'extension de gestion des sessions apporte un support orienté objet pour la création des gestionnaires de sessions, avec une nouvelle interface Session_Handler_Interface Et d'autres améliorations dans Reflexion, SNMP (nouvelle API orientée objet), SPL, Zlib, postgresql, PDO DB-LIB, OpenSSL, Mysql, JSON, Intl, Hash, filesystem, Date, Curl, etc... # Gestion du projet # Depuis de nombreuses années, la gestion du projet n'était plus satisfaisante sur de nombreux points. Il en résultait des difficultés pour contribuer, des évolutions pas toujours cohérentes voire insatisfaisantes. Mais lors du développement de cette version 5.4, beaucoup de choses ont évolué dans le bon sens. Certains contributeurs ont secoué le cocotier (non sans mal, quelques "anciens" se montrant réfractaires au changement). Il en résulte des décisions qui font maintenant date dans l'histoire du projet. Pour la gestion des sources, malgré un (difficile) passage à Subversion en 2009, il a été enfin décidé de passer à un gestionnaire plus moderne : Git. Le depôt Git et toute l'infrastructure qui est autour (machines de build, de tests, etc.) sont en cours d'installation. Il y a cependant nombre de projets connexes déjà sous git (comme les sources du site web). Les dépôts officiels sont sur http://git.php.net/ . Et [des miroirs sont disponibles sur Github](https://github.com/php/). Le processus de release était plutôt "folklorique" auparavant. Maintenant, [il est spécifié dans une RFC](https://wiki.php.net/rfc/releaseprocess) qui a été votée et acceptée. Cela concerne aussi bien les cycles de sortie des versions, que la sélection des améliorations à intégrer dans une nouvelle version. D'ailleurs, dorénavant toutes décisions (sur la vie du projet, sur l'intégration de nouvelles fonctionnalités etc), seront votées par les contributeurs actifs (ayant un accès au dépôt) et par des membres « influents » de la communauté PHP. [Le processus de vote est spécifié dans une autre RFC](https://wiki.php.net/rfc/voting). Ainsi donc, le développement du langage se formalise, se structure et des outils modernes vont être utilisés. Malgré les couacs récents lors de sorties de versions un peu précipitées, le projet PHP est sur le chemin du renouveau, et va s'orienter – on l'espère – vers plus de modernité, tant du point de vue organisation que dans le langage lui-même.