PHP 7.2 est disponible en version stable avec la bibliothèque de cryptographie Sodium
Et d'autres améliorations et nouvelles fonctionnalités

Le , par Michael Guilloux, Chroniqueur Actualités
L'équipe de développement de PHP vient d'annoncer la sortie de la deuxième mise à jour de fonctionnalités de PHP 7. PHP 7.2.0 vient presque deux ans après PHP 7.0 et un an après PHP 7.1. Rappelons que PHP 7.0 a apporté des gains de performance avec un moteur Zend Engine jusqu'à deux fois plus rapide que dans la version 5.6, mais également de nombreuses fonctionnalités.

La version 7.1 du langage de développement Web côté serveur a également suivi avec de nouvelles fonctionnalités et encore des gains de performances : jusqu’à 35 % plus rapide pour les charges de travail avec une utilisation intensive du CPU, d'après Zeev Suraski, cofondateur de Zend Technologies.

En ce qui concerne les nouvelles fonctionnalités de PHP 7.1, il s'agissait entre autres du support des types nullable, l'introduction d'un type de retour void qui permet d’indiquer qu’une fonction ne retourne rien, un nouveau pseudo-type similaire à callable appelé Iterable, l'ajout d'un support pour spécifier la visibilité des constantes (public, protected et private), la gestion des exceptions par capture multiple, etc.

PHP 7.2 vient également avec de nombreuses améliorations et de nouvelles fonctionnalités. L’une des grandes nouveautés est la bibliothèque cryptographique Sodium qui a été intégrée au noyau de PHP. Cette bibliothèque logicielle permet le chiffrement, le déchiffrement, les signatures, le hachage de mots de passe et plus encore. D’après Scott Arciszewski, l’ingénieur qui a proposé de l’intégrer au noyau de PHP 7.2, cela va permettre d’améliorer la sécurité du langage, mais également celle des outils construits avec PHP. Il explique par exemple que le CMS WordPress, écrit en PHP, contient de nombreux problèmes de sécurité qui sont dus à l’absence d’outils de cryptographie appropriés. En intégrant la bibliothèque logicielle à PHP, il pense donc que cela obligerait les développeurs de WordPress à implémenter une meilleure sécurité dans le CMS.

Arciszewski considère aussi Sodium comme une bibliothèque de cryptographie moderne comme on n’en trouve pas chez les autres langages. En l'intégrant dans le noyau du langage, PHP devient donc le premier langage de programmation à supporter une bibliothèque de cryptographie « ;moderne ;» dans son noyau.

Au-delà de Sodium, PHP 7.2 vient avec des améliorations et nouvelles fonctionnalités comme :

  • la possibilité de convertir des clés numériques dans les objets et tableaux lors de cast. Les clés numériques sont maintenant mieux appréhendées lors de cast d'un tableau en objet et d'objet en tableau (cast explicite ou par la fonction settype()) ;
  • le comptage d'objets non dénombrables. Un E_WARNING sera émis lors de la tentative d'utilisation de la fonction count() sur un type non dénombrable ;
  • HashContext en tant qu'objet ;
  • ajout d'Argon2 à l'API pour le hachage de mot de passe ;
  • amélioration des constantes TLS ;
  • la suppression de l'extension Mcrypt. L'extension MCrypt a maintenant été déplacée du noyau vers PECL. Étant donné que la bibliothèque mcrypt n'a pas eu de mises à jour depuis 2007, son utilisation est fortement découragée. Au lieu de cette extension, soit OpenSSL ou l'extension sodium doit être utilisé.

Vous trouverez sur le site officiel de PHP, la liste exhaustive des changements dans PHP 7.2. Il faut déjà noter qu’il y a quelques évolutions incompatibles avec les versions précédentes qui doivent être testées avant de passer à PHP 7.2 dans les environnements de production. PHP 7.2 est disponible en téléchargement sur son site.

Téléchargements PHP 7.2

Source : Liste de diffusion PHP

Et vous ?

Quelles versions de PHP utilisez-vous ?
Que pensez-vous de cette nouvelle version de PHP ?
Quelles sont les fonctionnalités que vous appréciez le plus ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de Mrsky Mrsky - Membre éprouvé https://www.developpez.com
le 01/12/2017 à 2:07
J'aime beaucoup la direction que prend PHP ces derniers temps, notamment sur tout ce qui est typehint et maintenant libsodium

PHP7.2 et Symfony4 dans la même semaine, je suis content
Avatar de Sodium Sodium - Membre éprouvé https://www.developpez.com
le 04/12/2017 à 6:40
avec la bibliothèque de cryptographie Sodium
Il ne me semble pourtant pas avoir été consulté sur la question ...
Avatar de Eric30 Eric30 - Membre régulier https://www.developpez.com
le 04/12/2017 à 8:58
Depuis la v7, PHP est en train de supprimer peu à peu les derniers arguments objectifs que l'on pouvait reprocher à ce langage.
Nouveau moteur avec des performances qui n'ont plus rien à envier à Python, typage des variables*, POO moderne... on y arrive!

* Malheureusement pas géré par tous les frameworks avec notamment les classes compilées avant exécution.
Avatar de rawsrc rawsrc - Modérateur https://www.developpez.com
le 04/12/2017 à 12:52
@Eric30
C'est clair qu'au fil des versions PHP s'est grandement bonifié. Avec l'avènement de la version 7, on a carrément basculé dans une autre dimension : typage, sucres syntaxiques bien à propos, des performances à tomber à la renverse, une POO solide. Bref, je dois t'avouer que depuis que j'ai goûté à la version 7+, j'ai beaucoup de mal à revenir sur des scripts anciens version 5.6-.
Dans les entreprises, c'est pareil. PHP est en train de revenir en odeur de sainteté. Vu que le langage s'est rigidifié, il est devenu plus difficile de faire du code sale (bon, c'est toujours possible, je te rassure, mais si tu te donnes les moyens d'utiliser les nouveautés de PHP 7+, c'est presque mission impossible). Tous les échos sont vraiment supers positifs.

Le support natif de la bibliothèque de sécurité Sodium par le moteur v 7.2 est carrément une "killer feature".

Go PHP

PS : La prochaine version majeure 8.0 devrait intégrer une moteur JIT, là, en terme de perfs, ça devrait être le nirvana et laisser les autres accessoirement à la traîne
Avatar de Eric30 Eric30 - Membre régulier https://www.developpez.com
le 04/12/2017 à 14:03
Citation Envoyé par rawsrc Voir le message


PS : La prochaine version majeure 8.0 devrait intégrer une moteur JIT, là, en terme de perfs, ça devrait être le nirvana et laisser les autres accessoirement à la traîne
Question: comment cela fonctionnerait-il? Comme Java: c'est à dire que l'on précompile avant de livrer?
Avatar de Mrsky Mrsky - Membre éprouvé https://www.developpez.com
le 04/12/2017 à 20:22
Oui en gros tu pré-compiles dans un format intermédiaire et lors de l’exécution du programme ce format intermédiaire est compilé en langage machine. Je suis curieux de voir comment PHP implémenterait ça car par design une instance de PHP a une nature très éphémère contrairement à un backend Java ou Python.
Avatar de Aizen64 Aizen64 - Membre averti https://www.developpez.com
le 04/12/2017 à 22:04
J'ignore quel est le rapport de performance entre PHP, Python, Java et je pense que sur une appli web, ce n'est pas le point essentiel sachant qu'une requête SQL de trop c'est 500 ms de perdues, aucun framework ne rattrape ça. Je trouve que c'est tout de même une bonne chose d'en améliorer les perfs, si la MAJ ne coûte rien pourquoi refuser le gain de perfs et conso de mémoire à la baisse ?

Des Generics en 7.3 ? , une syntaxe alternative pour éviter d'écrire $maVariable mais maVariable et duTexte.length ? Eviter un plantage complet lors d'erreur sur des DateTime ? Ne pas autoriser $nom = "Inconnu" transformé en 0 si typecast en entier ? C'est pas normal ce dernier bug.
Avatar de Vadrygar Vadrygar - Membre habitué https://www.developpez.com
le 05/12/2017 à 10:28
Pendant ce temps je suis bloqué en PHP5.5.

Tristesse et desespoir :'(
Avatar de SurferIX SurferIX - Membre chevronné https://www.developpez.com
le 08/12/2017 à 10:00
Citation Envoyé par Tsilefy Voir le message
L'article parle d'une intégration dans le core, pas dans un module externe.

Si tu veux, comparons ce qui est comparable: package vs package. Le package pecl de libsodium existe depuis 2014. C'est exactement ce même package qui va etre intégré dans PHP 7.2
Ah bon. Le 06/03/2013. Il y a presque 5 ans de ça. Python avait juste un an d'avance sur pecl/Php. Tu as raison ce n'est pas beaucoup, je m'excuse de ma bourde.

https://umbrella.cisco.com/blog/2013/03/06/announcing-sodium-a-new-cryptographic-library/

Code : Sélectionner tout
1
2
3
4
5
PYTHON EXAMPLE
Installing the PyNaCl package
$ git clone git@github.com:dstufft/pynacl.git
$ cd pynacl
$ python setup.py install
Citation Envoyé par Aizen64 Voir le message
J'ignore quel est le rapport de performance entre PHP, Python, Java et je pense que sur une appli web, ce n'est pas le point essentiel sachant qu'une requête SQL de trop c'est 500 ms de perdues, aucun framework ne rattrape ça. Je trouve que c'est tout de même une bonne chose d'en améliorer les perfs, si la MAJ ne coûte rien pourquoi refuser le gain de perfs et conso de mémoire à la baisse ?
Je suis 100% d'accord avec toi : améliorer les perfs, c'est super, mais le vrai ralentisseur aujourd'hui à notre époque du big data, c'est les données, et le moteur BD. Si tu fais une Ferrari (Php) mais que tu ne peux rouler qu'en campagne (MariaDB,MySQL), au mieux route nationale (PostGreSQL), ça ne sert à rien...

Citation Envoyé par Aizen64 Voir le message
Ne pas autoriser $nom = "Inconnu" transformé en 0 si typecast en entier ? C'est pas normal ce dernier bug.
C'est une fonctionnalité de Php. Je dirais une immondice, ou comme toi, un bogue, mais bon... Allez du troll, j'aime me faire haïr, mais pourtant c'est quelque part constructif, vous saurez qu'un langage haut niveau gère ça proprement :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
python3
Python 3.6.3 (default, Oct 25 2017, 17:21:40) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> int("0")
0
>>> int("0.5")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0.5'
>>> int("test")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'test'
>>>
Avatar de rawsrc rawsrc - Modérateur https://www.developpez.com
le 08/12/2017 à 10:31
Salut

Citation Envoyé par SurferIX Voir le message
Je suis 100% d'accord avec toi : améliorer les perfs, c'est super, mais le vrai ralentisseur aujourd'hui à notre époque du big data, c'est les données, et le moteur BD. Si tu fais une Ferrari (Php) mais que tu ne peux rouler qu'en campagne (MariaDB,MySQL), au mieux route nationale (PostGreSQL), ça ne sert à rien...
tu pousses loin la mauvaise foi dis donc..., je te ferai remarquer que c'est valable pour tous les langages.
D'ailleurs si tu veux des perfs coté BDD, c'est pas le choix qui manque. PHP s'interface avec à peu près tout ce qui se fait en la matière.
La vélocité de PHP 7+ n'est plus à démontrer (même face à python 3 qui est clairement derrière). Après les problèmes des autres briques logicielles qui se traînent c'est clairement autre chose. Tu ne peux pas faire d'amalgame si grossier.

Pour ce qui est des transtypages exotiques, c'est très bien documenté et au pire tu fais comme moi que des comparaisons strictes avec des casting explicites.
Bref, les raisons de ce comportement remontent à la préhistoire du web à l'époque ou PHP était en version 1.0

Pour finir sur le typage :
Typage strict

Par défaut, PHP va convertir les mauvais types vers le type scalaire attendu tant que possible. Par exemple, une fonction, qui attend comme paramètre un integer (entier), à laquelle est passée une string (chaine de caractères) recevra une variable de type string.

Il est possible d'activer un typage strict fichier par fichier. Dans ce mode, seule une variable du type exact correspondant au type attendu dans la déclaration sera acceptée sinon une exception du type TypeError sera levée. La seule exception à cette règle est qu'un entier (integer) peut être passé à une fonction attendant un nombre flottant (float). Les appels aux fonctions depuis des fonctions internes ne seront pas affectés par la déclaration strict_types.

Pour activer le typage strict, l'expression declare est utilisée avec la déclaration strict_types :
Contacter le responsable de la rubrique Accueil