PHP 7.4 devrait être rendu disponible vers la fin de cette année
Voici un aperçu des nouveautés qui pourraient y figurer
Le 2019-01-18 01:53:58, par Coriolan, Expert éminent sénior
PHP est utilisé par 78,9 % des sites de la toile, ce qui en fait l’un des langages de programmation côté serveur les plus utilisés. En décembre 2018, PHP 7.3 a été rendu disponible en version stable, apportant de nouvelles fonctionnalités et améliorations. Un mois plus tard, et des rapports ont déjà commencé à relayer les nouveautés de PHP 7.4, la prochaine itération du langage.
PHP 7.4 devrait probablement être rendu disponible en décembre 2019. Alors voici quelques nouveautés qui pourraient faire leur apparition dans la nouvelle version :
Preloading
PHP a fait de grands progrès en ajoutant de puissantes fonctionnalités au cours des dernières années. Le moteur de PHP (Zend engine 3) a par été largement réécrit pour être beaucoup plus rapide que les versions précédentes. 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. La version 7.1.0 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.
Une nouvelle fonctionnalité devrait améliorer davantage la performance de PHP. Si vous utilisez un framework, ses fichiers doivent être chargés et recompilés pour chaque requête. Le Preloading permet au serveur de charger les fichiers PHP sur la mémoire au démarrage, et les rendre disponibles en permanence pour toutes les requêtes ultérieures. Seul bémol, si la source des fichiers préchargés change, il faudra redémarrer le serveur.
Typed properties
Les variables de classe peuvent être indiquées :
Variation de type améliorée
Il sera possible d’utiliser des types de retour covariants :
et des arguments contravariants :
Cette proposition est actuellement en phase de vote, mais il apparait qu’elle devrait être approuvée sans soucis.
Foreign Function Interface
Foreign Function Interface (FFI) permet de faire appel à du code C à partir de l’espace utilisateur (userland). Cela veut dire que les extensions PHP peuvent être écrites en PHP. Cependant, il faudra maitriser C pour utiliser correctement cette fonctionnalité.
Null Coalescing Assignment Operator
Peut-être traduit en : Opérateur d'assignation coalescente nulle, il permet de faire ça:
au lieu de ça :
Cependant, le créateur de cette RFC n’a pas été en mesure de finir son implémentation. Il reste à savoir si un membre de l’équipe PHP core sera en mesure de la finir.
ext-hash toujours activé
Cette extension est maintenant disponible en permanence dans toutes les installations de PHP.
Password Hashing Registry (Registre de hachage de mots de passe)
Modifications internes de la façon d’utilisation des bibliothèques de hachage, de sorte qu'il devient plus facile pour l'utilisateur de les utiliser.
Source : stitcher
Et vous ?
Qu’en pensez-vous ?
Quelles versions de PHP utilisez-vous ?
Quelles sont les fonctionnalités que vous appréciez le plus ?
Voir aussi
W3Tech : plus de 60 % des sites Web tournent sur PHP 5.x, une version qui ne sera plus supportée après le 31 décembre 2018
PHP 7.3 est disponible en version stable, un aperçu des nouveautés du langage de programmation côté serveur
Les benchmarks réalisés sur la dernière préversion de PHP 7.3 sont prometteurs, et la sortie de la version stable se profile à l'horizon
PHP 7.4 devrait probablement être rendu disponible en décembre 2019. Alors voici quelques nouveautés qui pourraient faire leur apparition dans la nouvelle version :
Preloading
PHP a fait de grands progrès en ajoutant de puissantes fonctionnalités au cours des dernières années. Le moteur de PHP (Zend engine 3) a par été largement réécrit pour être beaucoup plus rapide que les versions précédentes. 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. La version 7.1.0 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.
Une nouvelle fonctionnalité devrait améliorer davantage la performance de PHP. Si vous utilisez un framework, ses fichiers doivent être chargés et recompilés pour chaque requête. Le Preloading permet au serveur de charger les fichiers PHP sur la mémoire au démarrage, et les rendre disponibles en permanence pour toutes les requêtes ultérieures. Seul bémol, si la source des fichiers préchargés change, il faudra redémarrer le serveur.
Typed properties
Les variables de classe peuvent être indiquées :
Code : |
1 2 3 4 5 6 | class A { public string $name; public Foo $foo; } |
Il sera possible d’utiliser des types de retour covariants :
Code : |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } |
Code : |
1 2 3 4 5 6 7 8 9 10 11 | class A { public function contraVariantArguments(ChildType $type) { /* … */ } } class B extends A { public function contraVariantArguments(ParentType $type) { /* … */ } } |
Foreign Function Interface
Foreign Function Interface (FFI) permet de faire appel à du code C à partir de l’espace utilisateur (userland). Cela veut dire que les extensions PHP peuvent être écrites en PHP. Cependant, il faudra maitriser C pour utiliser correctement cette fonctionnalité.
Null Coalescing Assignment Operator
Peut-être traduit en : Opérateur d'assignation coalescente nulle, il permet de faire ça:
Code : |
$data['date'] ??= new DateTime();
Code : |
$data['date'] = $data['date'] ?? new DateTime();
ext-hash toujours activé
Cette extension est maintenant disponible en permanence dans toutes les installations de PHP.
Password Hashing Registry (Registre de hachage de mots de passe)
Modifications internes de la façon d’utilisation des bibliothèques de hachage, de sorte qu'il devient plus facile pour l'utilisateur de les utiliser.
Source : stitcher
Et vous ?
Voir aussi
-
rawsrcExpert éminent séniorEt un sacré sucre syntaxique (opérateur d'assignation sur valeur null) :
Avant PHP 7.4 :
Code : 1
2
3if ( ! isset($array['key'])) { $array['key'] = computeDefault(); }
La branche 7 de PHP est exactement ce qu'il fallait à ce langage qui pantouflait.
Cette branche a induit une sacrée rigueur dans le code. Cela a permis d'améliorer les perfs et surtout de ramener des développeurs en provenance d'autres langages (à fort typage).
Bref, que du bonle 29/11/2019 à 16:57 -
stailerMembre chevronnéC'est pas trop mal...
- S'il y a d'autres paramètres tu dois obligatoirement les mettre en 1er -> bon, pourquoi pas...
- Chaque élément du tableau est passé comme un paramètre -> franchement pas terribleCode : 1
2dates($maDate1, $maDate2, $maDate3 )
Code : 1
2
3
4
5
6
7
8
9
10
11
12
13/** * @param DateTime[] $dates * @return DateTime[] */ function dates( $dates) { return $dates; } $a = new DateTime(); dates([$a, $a, $a]);
le 18/01/2019 à 11:45 -
crozet.magentaMembre avertioui c'est ce que je dis c'est du bricolage pour contourner une limitation du langage donc ça a des inconvénients et ça ne peut pas convenir pour tous les usages.
Perso je n'ai jamais utilisé ce genre de code pour les deux raisons que tu as citées : d'une part l'utilisation de la fonction devient plus compliqué et moins intuitif puisqu'on doit passer les éléments un par un (On peut aussi utiliser l'opérateur de décomposition $foo = dates(...$monTableauDeDates) ce qui rend le code plus lisible mais pas plus logique) et l'autre raison c'est que les IDE gèrent très bien les annotations de type Classe[]le 18/01/2019 à 14:31 -
TheLastShotMembre extrêmement actifBeau progrès du point de vue du typage des propriété et de la contravariance. Mais perso j'attends surtout l'implémentation des générics.le 18/01/2019 à 16:01
-
ZeflingExpert confirméEn gros, on est passé par ces 3 étapes. Bha, je préféré de loin la dernière.
Code php : 1
2
3
4$longVariableName['property name']['key name'] = isset($longVariableName['property name']['key name']) ? $longVariableName['property name']['key name'] : computeDefault(); $longVariableName['property name']['key name'] = $longVariableName['property name']['key name'] ?? computeDefault(); $longVariableName['property name']['key name'] ??= computeDefault();
le 01/12/2019 à 10:08 -
CeliraModératricele 02/12/2019 à 10:33
-
grunkModérateurPour le coup les constructeur promouvant je trouve pas ca exceptionnel. C'est certes rapide à écrire mais d'un point de vue lisibilité c'est l'enfer surtout quand on mixe les 2 type d'attributs.
De plus il devient difficile de commenter correctement ses attributs de classes quand on utilise ce genre de constructeur.
Je les utilise en Typescript et je commence à revenir en arrière petit à petit.le 22/06/2020 à 9:37 -
stailerMembre chevronnéEnfin PHP va ressembler à un vrai langage objet... En espérant que ce ne soit pas trop tard, en 2020, vu les améliorations très régulières d'autres langages.
Petite question : il sera possible de déclarer un type objet comme on le voit dans l'exemple :Code : public Foo $foo;
Par exemple :Code : public Foo[] $foo;
https://wiki.php.net/rfc/typed_properties_v2
Et je ne vois pas d'exemple à ce sujet. A chaque fois c'est un array simple qui est défini.le 18/01/2019 à 9:21 -
crozet.magentaMembre avertiça avait été proposé dans une RFC en php5.6 (et rejeté) mais elle n'a pas été remise au planning pour le moment
=> https://wiki.php.net/rfc/arrayof
il est possible (avec un bricolage) de typer des tableaux d'objet en paramètre d'une fonction mais il n'est pas possible à ma connaissance de typer le retourCode : 1
2function dates(\DateTime ...$dates) { //$dates contient un tableau de \DateTime }
le 18/01/2019 à 10:27 -
SofEvansMembre émériteEuh, c'était pas possible de faire
Code : $array['key'] = $array['key'] ?? computeDefault();
le 29/11/2019 à 17:59