URL: https://linuxfr.org/news/peuch-peuch-cinq-cinq-pour-php-5-5 Title: Peuch-peuch Cinq Cinq, pour PHP 5.5 Authors: Loïc Blot Nÿco, ZeroHeure, claudex et Benoît Sibaud Date: 2013年06月25日T09:47:04+02:00 License: CC By-SA Tags: php, php55 et postgresql Score: 37 PHP 5.5 est sorti le 20 juin, un peu plus de 1 an après la version 5.4 (1er mai 2012) ![PHP](http://static.php.net/www.php.net/images/php.gif) ---- [PHP 5.5.0 Release Announcement](http://www.php.net/releases/5_5_0.php) [Changelog complet de PHP 5.5](http://www.php.net/ChangeLog-5.php#5.5.0) ---- # Nouveautés de PHP 5.5 # ## Générateurs et coroutines ## Le support des générateurs a été ajouté via la directive `yield`, que l'on peut retrouver par exemple, en C#. Un générateur est une fonction permettant de générer des éléments, comme le fait la fonction `range`. Dans l'exemple ci-dessous, on crée un générateur de suite fibonacci pour permettre d'itérer dessus : ```perl function fibonacci($limit = 50) { $cur = 1; $last = 0; for ($i=1;$i<$limit;$i++) { yield $cur; $tmp = $last; $last = $cur; $cur = $last + $tmp; } } echo "Suite de Fibonacci: "; foreach (fibonacci(10) as $nb) { echo $nb." "; } echo "\n"; ``` Ce qui nous donnera : ```Suite de Fibonacci: 1 2 3 5 8 13 21 34 55 89``` ## Mot-clef _finally_ ## Avant la version 5.5 la gestion des exceptions PHP était effectuée par le biais des opérateurs `try` et `catch`. L'opérateur `catch` était appelé lorsqu'une exception était levée par l'appel de la fonction `throw`. Le mot-clef `finally` a été introduit, permettant de combler un manque dans PHP par rapport à d'autres langages comme Java ou Python. `finally` permet d'ajouter un bloc de code à exécuter, même si une exception a été levée. Exemple : ```perl $con = NULL; try { $con = mysql_connect("localhost","myuser","mypwd"); if (!$con) { throw new Exception("Echec de connexion à la base de données"); } catch { echo 'Erreur MySQL : ', $e->getMessage(), "\n"; } finally { if ($con !== NULL) { close($con); } } ``` ## API simplifiée pour hasher des mots de passe ## Cette nouvelle API permet de hasher rapidement des mots de passe, visualiser quelques infos sur le hash et vérifier leur validité. À l'heure actuelle, seul `blowfish` est supporté. ### Hashage ### La fonction `password_hash` permet d'effectuer ce hashage. ```perl string password_hash ( string $password , integer $algo [, array $options ] ) ``` Les paramètres passés sont : * le mot de passe en clair; * l'algorithme de hash: PASSWORD_DEFAULT et PASSWORD_BCRYPT - à noter que PASSWORD_DEFAULT correspond pour l'heure à PASSWORD_BCRYPT; * des options: * `salt` : un grain de sel afin de complexifier le hash * `cost` : le coût du hash. Plus la valeur est élevée plus le hash est robuste et long à générer. ```perl $options = [ 'salt' => "free-software", 'cost' => 18, ]; echo password_hash("linuxfr", PASSWORD_DEFAULT, $options); ``` ### Comparaison du hash et du mot de passe ### La fonction password_verify permet de comparer un mot de passe à un hash défini (par exemple en base de données) ```perl boolean password_verify ( string $password , string $hash ) ``` ### Vérification de l'algorithme de hash ### La fonction `password_needs_rehash` permet de vérifier que le hash donné correspond bien à l'algorithme et aux critères de complexité donnés. ```perl boolean password_needs_rehash ( string $hash , string $algo [, string $options ] ) ``` ### Informations sur un hash ### Enfin, la fonction `password_get_info` permet d'obtenir les informations sur un hash (algorithme, options). ```perl array password_get_info ( string $hash ) ``` La fonction retourne un tableau contenant 3 éléments : * algo : l'algorithme au format constante * algoName : le nom de l'algorithme sous forme lisible * options : les options passées lors du hashage du mot de passe (coût et grain de sel) ## Déréférencement des tableaux/chaînes de caractères constants ## Il est désormais possible d'accéder à des éléments atomiques dans un tableau ou une chaîne de caractères. ```perl echo "linuxfr"[3]."\n"; echo ["bsd","linux","unix"][1]."\n"; ``` retournera : ```perl u linux ``` ## Résolution de nom de classe scalaire ## Cette nouvelle notion permet de retrouver le nom d'une classe. ```perl class MyClass1 {} echo "Le nom de ma classe est: ".MyClass1::class."\n"; ``` retournera : ```Le nom de ma classe est: MyClass1``` Si vous utilisez les espaces de noms, la fonction affichera également l'espace de noms associé. ```perl namespace MyNameSpace; class MyClass1 {} echo "Le nom de ma classe est: ".MyClass1::class."\n"; ``` retournera : ```Le nom de ma classe est: MyNameSpace\MyClass1``` ## empty() sur les appels de fonctions et expressions ## Auparavant empty ne pouvait être utilisé que sur des variables PHP. Il est désormais possible de l'utiliser sur des appels de fonctions et expressions. ```perl # PHP 5.4 $var = myFunc(); if (empty($var)) { // quelque chose } $var2 = false; if (empty($var2)) { // quelque chose d'autre } ``` ```perl # PHP 5.5 if (empty(myFunc())) { // quelque chose } if (empty(false)) { // quelque chose d'autre } ``` ## Clefs d'itération non-scalaires ## Added support for non-scalar Iterator keys in foreach. ## Utilisation de list() dans les déclarations foreach ## Il est désormais possible d'appeler la fonction list dans un foreach: ```perl $array = [ ["MySQL", "beaucoup utilisé"], ["PostgreSQL", "monte"], ["Oracle", "trop cher"] ]; foreach($array as list($name,$adj)) { echo $name." est ".$adj."\n"; } ``` retournera : ``` MySQL est beaucoup utilisé PostgreSQL est monte Oracle est trop cher ``` ## Extension Zend OPcache ## Cette nouvelle extension est dédiée à l'amélioration des performances de PHP. Elle permet de stocker le bytecode généré par PHP dans la mémoire partagée, évitant ainsi de relire et parser les scripts à chaque exécution. ## Mise à jour de la bibliothèque GD ## GD passe en version 2.1 et intègre des améliorations de fonctions existantes et des correctifs. De nouvelles fonctionnalités intéressantes ont également été ajoutées : * retournement d'images via la fonction `imageflip`; * recadrage avancé via les fonctions `imagecrop` et `imagecropauto`. * lecture et écriture du format d'images WebP via `imagecreatefromwebp` et `imagewebp`. # Mises à jour de compatibilité # * les GUID du logo PHP ont été supprimés; * Windows XP et Windows Server 2003 ne sont plus supportés ( _ouf_ ); * la sensibilité à la casse n'est plus locale. L'insensibilité à la casse des nom des fonctions, classes et constantes est gérée localement et de manière indépendante, conformément aux règles ASCII.

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