URL: https://linuxfr.org/news/sortie-de-php-5-6 Title: Sortie de PHP 5.6 Authors: _jordan_ palm123, Stéphane ESCAICH, Benoît Sibaud et cfx Date: 2014年08月30日T16:45:34+02:00 License: CC By-SA Tags: php56 et php Score: 40 Ultime version de la branche 5.x, PHP 5.6.0 apporte quelques possibilités de développement, un débogueur interactif et corrige quelques 150 bogues. Les principales nouveautés sont : * Les expressions de constantes scalaires * Fonctions à nombre d'arguments variable ainsi que l'opérateur `...` pour empaqueter/dés-empaqueter les arguments * L'opérateur `**` pour l'exponentiation * L'extension du mot-clé `use` pour importer les fonctions et les constantes * Un débogueur interactif : *phpdbg* intégré comme module SAPI. * La ré-utilisabilité de `php://input` faisant passer `$HTTP_RAW_POST_DATA` en déprécié. * Les objets GMP (GNU Multiple Precision) supportent maintenant la surcharge des opérateurs et le transtypage en types scalaires. Plus de détails sont disponibles dans la suite de cette dépêche. ---- [Annonce officielle](http://php.net/index.php#id2014-08-28-1) [Nouvelles fonctionnalités](http://fr2.php.net/manual/fr/migration56.new-features.php) [Migrer de PHP 5.5 à PHP 5.6](http://fr2.php.net/manual/en/migration56.php) [Changelog PHP 5.6](http://php.net/ChangeLog-5.php#5.6.0) ---- # Nouveautés ## Les expressions de constantes scalaires Il est maintenant possible de définir des constantes d'après le résultat d'opérations effectuées sur d'autres constantes. Il est également possible de les utiliser dans les déclarations de propriété et dans les arguments par défaut de fonctions. Exemple tiré du site [php.net](http://fr2.php.net/manual/fr/migration56.new-features.php) : ``` PHP const UN = 1; const DEUX = UN * 2; class C { const TROIS = DEUX + 1; const UN_SUR_TROIS = UN / self::TROIS; const RESULTAT = 'La valeur de TROIS est '.self::TROIS; public function f($a = UN + self::TROIS) { return $a; } } echo (new C)->f()."\n"; echo C::RESULTAT; ``` Résultat : > 4 La valeur de TROIS est 3 ## Fonctions à nombre d'arguments variable Les fonctions PHP peuvent accepter un nombre d'arguments variable, ceux-ci seront contenus dans un tableau défini grâce à l'opérateur ... Exemple : ``` PHP function somme($arg1, $arg2 = null, ...$args){ //$args est un array contenant les arguments restants //$count($args) représente le nombre d'arguments dans $args return $arg1+$arg2+array_sum($args); } somme(1); somme(1,2); somme(1,2,3,4); ``` A noter que l'on peut utiliser le [typage explicite](http://php.net/manual/fr/language.oop5.typehinting.php). ## Dés-empaquetage des objets L'opérateur `...` peut aussi être utilisé lors de l'appel de fonction pour dés-empaqueter un tableau ou tout objet parcourable par foreach. Exemple tiré du site [php.net](http://fr2.php.net/manual/fr/migration56.new-features.php) : ``` PHP function add($a, $b, $c) { return $a + $b + $c; } $operators = [2, 3]; echo add(1, ...$operators); ``` ## L'opérateur `**` pour l'exponentiation L'opérateur `**` représente l'exponentiation, l'opérateur `**=` est utilisé pour l'assignation. Exemple : ``` PHP $a = 2**3**2; // $a = 512 $a **= 5; // $a = 35184372088832 ``` Attention, cet opérateur est associatif à droite : 2 ** 3 ** 2 est équivalent à 2 ** (3 ** 2). ## Extension du mot-clé use Depuis PHP 5.3, il est possible d'importer des classes avec l'opérateur `use`. Il est maintenant possible d'importer des fonctions ou des constantes. Exemple tiré du site [php.net](http://fr2.php.net/manual/fr/migration56.new-features.php) : ``` PHP namespace Name\Space { const FOO = 42; function f() { echo __FUNCTION__."\n"; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."\n"; f(); } ``` ## phpdbg Utilisable pour PHP>= 5.4 et inclus dans PHP 5.6, [phpdbg](http://phpdbg.com/docs) est un débogueur complet utilisable sans impact sur les performances ni sur les fonctionnalités du code. Son objectif est d'être léger, puissant et simple à utiliser. ## Ré-utilisabilité de `php://input` Les flux `php://` sont des flux d'entrée/sortie fournis par PHP. Le flux `php://input` permet d'accéder en lecture seule aux données brutes depuis le corps de la requête. Dans le cas de requêtes POST, il se substitue maintenant à la variable `$HTTP_RAW_POST_DATA` qui nécessitait l'activation de `always_populate_raw_post_data boolean` dans le php.ini pour inclure les type MIME reconnus. Utilisation : ``` PHP $postdata = file_get_contents("php://input"); ``` Ce nouveau mécanisme a également permis de réduire significativement la quantité de mémoire requise lors des opérations POST. # Problèmes de compatibilité Quelques incompatibilités sont à prévoir pour cette nouvelle version. Comme à l'accoutumée, il est conseillé de lire (en anglais) la [page de migration](http://fr2.php.net/manual/en/migration56.php) de php5.5 vers php5.6. Les principales incompatibilités se situent au niveau des changements OpenSSL : Tous les flux clients chiffrés activent désormais par défaut la vérification par paire. A noter également, la fonction `json_decode` sera légèrement plus stricte puisque les inputs *true*, *false* et *null* seront refusés s'ils ne sont pas entièrement en minuscule. #Le Futur ## PHP7 PHP s'oriente vers la version 7. Après [quelques débats](https://wiki.php.net/rfc/php6), il a été choisi de sauter la version 6. En effet, ce projet échoué, devant notamment rendre PHP entièrement compatible avec Unicode, possédait trop de référence et de livres consacrés. Les principales nouveautés de PHP6 ont d'ailleurs déjà été incluses au fil de l'eau dans>= PHP5.3. PHP7 n'a définitivement pas les même objectifs. ## PHPNG et compilation à la volée Comme expliqué [ici](http://www.phpclasses.org/blog/post/242-PHP-7-Features-and-Release-Date.html) (en anglais), PHP7 repart sur les bases de [PHPNG](https://wiki.php.net/rfc/phpng). Concrètement, il s'agit avant tout de se doter d'un nouveau moteur bien plus performant que le Zend Engine actuel. Ce gain de performance pourra être accentué par le compilation à la volée (JIT : Just In Time) qui devrait être implémenté par Dmitry Stogov. Il annonce 10 à 20 pourcent de vitesse en plus sur des applications réelles : Wordpress 3.6 (+20%), Dupral 6.1 (+11.7%) ... ## Syntaxe d'arbre abstraite Quelques changements de syntaxe et de fonctionnement du compilateur pourrait également être inclus dans la version 7 pour profiter de performances encore supérieures. ## PHP vs HACK Le langage [HACK](http://hacklang.org/) et sa machine virtuelle [HHVM](http://hhvm.com/) ont été dévoilés il y a quelques mois par Facebook. Une [dépêche](https://linuxfr.org/news/the-hack-language-php-avec-un-peu-de-typage-statique) avait été publiée pour l'occasion. En grande partie compatible avec PHP, ce langage apporte notamment le typage statique, l'écriture de squelettes HTML protégés des failles XSS, la programmation asynchrone. HHVM, quant-à-elle, propose la compilation à la volée et peut faire tourner du PHP. Il ne fait aucun doute que ce sera un concurrent très sérieux pour PHP et que cela incitera ses mainteneurs à le faire évoluer rapidement pour ne pas se laisser distancer.

AltStyle によって変換されたページ (->オリジナル) /