Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

PHP 7.4.0 est disponible avec de nombreuses améliorations et de nouvelles fonctionnalités
Telles que les propriétés typées, un séparateur numérique littéral, et autres

Le , par Bill Fassinou

50PARTAGES

17  0 
Comme annoncé au début de cette année, la version 7.4 de PHP est rendue disponible. Cette version marque la quatrième mise à jour de la série PHP 7. PHP 7.4.0 est livré avec de nombreuses améliorations et de nouvelles fonctionnalités telles que :

Les propriétés typées

Code : Sélectionner tout
1
2
3
4
5
<?php
class User {
    public int $id;
    public string $name;
}
Les propriétés de classe prennent désormais en charge les déclarations de type. L'exemple ci-dessus imposera que $user->id ne peut se voir attribuer que des valeurs entières et $user->name ne peut se voir attribuer que des valeurs de chaîne.

Arrow functions

Arrow functions qu'on pourrait définir par "les fonctions flèches" fournissent une syntaxe abrégée pour définir les fonctions avec une liaison implicite de portée par valeur.

Code : Sélectionner tout
1
2
3
4
<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
Type de rendement limité Covariance et type d'argument Contravariance

La prise en charge complète des variances n'est disponible que si l'autochargement est utilisé. Dans un seul fichier, seules des références de type non cyclique sont possibles, car toutes les classes doivent être disponibles avant d'être référencées. Le code suivant va maintenant fonctionner :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
<?php
class A {}
class B extends A {}
 
class Producer {
    public function method(): A {}
}
class ChildProducer extends Producer {
    public function method(): B {}
}
Séparateur numérique littéral

Les littéraux numériques peuvent maintenant contenir des tirets de soulignement entre les chiffres.

Code : Sélectionner tout
1
2
3
4
5
<?php
6.674_083e-11; // float
299_792_458;   // decimal
0xCAFE_F00D;   // hexadecimal
0b0101_1111;   // binary
Plusieurs autres fonctionnalités sont apportées dans PHP 7.4 dont les « Weak references » (références faibles) qui permettent au programmeur de conserver une référence à un objet qui n'empêche pas que l'objet soit détruit. La suppression des exceptions de __toString() est maintenant autorisée. Auparavant, cela entraînait une erreur fatale. Les erreurs fatales récupérables existantes dans les conversions de chaînes de caractères ont été converties en exceptions d'erreur.

Opcache Preloading Spécifie un script PHP qui sera compilé et exécuté lors du démarrage du serveur, et qui peut précharger d'autres fichiers, soit grâce à include ou en utilisant la fonction opcache_compile_file(). Toutes les entités (par exemple fonctions et classes) définies dans ces fichiers seront disponibles aux requêtes prêt à l'emploi, jusqu'à ce que le serveur soit éteint.

Certaines fonctionnalités ont été dépréciées dont les opérateurs ternaires imbriqués sans parenthèses explicites. Les opérations ternaires imbriquées doivent dorénavant utiliser des parenthèses pour dicter l'ordre des opérations. Auparavant, lorsqu'elle était utilisée sans parenthèses, l'association de gauche ne se traduisait pas par le comportement attendu dans la plupart des cas.

Code : Sélectionner tout
1
2
3
4
<?php
1 ? 2 : 3 ? 4 : 5;   // déprécié
(1 ? 2 : 3) ? 4 : 5; // ok
1 ? 2 : (3 ? 4 : 5); // ok
Certaines extensions ont été supprimées du core. Ces extensions ont été transférées à PECL et ne font plus partie de la distribution PHP. Les versions paquet PECL de ces extensions seront créées en fonction de la demande des utilisateurs.

Téléchargez PHP 7.4

Source : PHP

Et vous ?

Que pensez-vous des changements apportés dans PHP 7.4 ?
Quelles versions de PHP utilisez-vous et pourquoi ?
Quelles nouvelles fonctionnalités souhaiteriez-vous avoir dans les futures versions de PHP ?

Voir aussi

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

PhpStorm 2019.2 disponible : propriétés typées de PHP 7.4, localisation de doublons, expressions régulières pour PHP, scripts Shell, etc.

PHP 8 va proposer un compilateur Just In Time qui devrait produire une amélioration des performances en vitesse

« Pourquoi on est repassé de Go à PHP ? », Danny van Kooten, l'éditeur de MailChimp nous livre les raisons de ce rebasculement

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de rawsrc
Modérateur https://www.developpez.com
Le 29/11/2019 à 16:57
Et un sacré sucre syntaxique (opérateur d'assignation sur valeur null) :
Avant PHP 7.4 :
Code : Sélectionner tout
1
2
3
if ( ! isset($array['key'])) {
    $array['key'] = computeDefault();
}
Avec PHP 7.4 : $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 bon
4  0 
Avatar de Zefling
Membre expert https://www.developpez.com
Le 01/12/2019 à 10:08
Citation Envoyé par Kulvar Voir le message
C'est pas vilain, l'opérateur ??= a été plutôt conçu pour un code du type.

Code php : Sélectionner tout
1
2
$longVariableName['property name']['key name'] = $longVariableName['property name']['key name'] ?? computeDefault();
$longVariableName['property name']['key name'] ??= computeDefault();
En gros, on est passé par ces 3 étapes. Bha, je préféré de loin la dernière.

Code php : Sélectionner tout
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();
1  0 
Avatar de Celira
Modératrice https://www.developpez.com
Le 02/12/2019 à 10:33
Citation Envoyé par Bill Fassinou Voir le message
Arrow functions

Arrow functions qu'on pourrait définir par "les fonctions flèches" fournissent une syntaxe abrégée pour définir les fonctions avec une liaison implicite de portée par valeur.

Code : Sélectionner tout
1
2
3
4
<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
Plus ou moins l'équivalent des lambdas Java, mais à la mode PHP
1  0 
Avatar de SofEvans
Membre chevronné https://www.developpez.com
Le 29/11/2019 à 17:59
Euh, c'était pas possible de faire

Code : Sélectionner tout
$array['key'] = $array['key'] ?? computeDefault();
avant php7.4 ?
0  0 
Avatar de rawsrc
Modérateur https://www.developpez.com
Le 29/11/2019 à 18:04
si, toutafé, mais t'avoueras que c'est vilain : $a = $a...
0  0 
Avatar de Kulvar
Membre actif https://www.developpez.com
Le 30/11/2019 à 20:50
Citation Envoyé par rawsrc Voir le message
si, toutafé, mais t'avoueras que c'est vilain : $a = $a...
C'est pas vilain, l'opérateur ??= a été plutôt conçu pour un code du type.

Code php : Sélectionner tout
1
2
$longVariableName['property name']['key name'] = $longVariableName['property name']['key name'] ?? computeDefault();
$longVariableName['property name']['key name'] ??= computeDefault();
0  0 
Avatar de rawsrc
Modérateur https://www.developpez.com
Le 30/11/2019 à 21:43
donc sans ce nouvel opérateur, l'écriture à l'ancienne était particulièrement vilaine : je dois t'avouer que commencer une expression comme ça $longVariableName['property name']['key name'] = $longVariableName['property name']['key name'], ça me picore le cerveau.

Avec la nouvelle notation : si la variable est définie et sa valeur différente de null, on la laisse tranquille sinon on l'a créée et on lui affecte une valeur par défaut. Personnellement la nouvelle syntaxe n'enlève rien à la lisibilité et rien à la compréhension, tout en étant moins verbeuse.
0  0 
Avatar de Sodium
Membre extrêmement actif https://www.developpez.com
Le 02/12/2019 à 7:24
Les propriétés typées, enfin, ça va sacrément simplifier la prise en charge par les IDE.
0  0 
Avatar de rawsrc
Modérateur https://www.developpez.com
Le 02/12/2019 à 14:46
Les fonctions abrégées : le pied !!!
Ensuite le fait que l'équipe ait enfin réglé les problèmes de covariance et contravariance, c'est un très gros plus pour la POO. J'ai déjà eu à contourner les plantages du moteur dans un design objet à cause de cette limitation. Enfin !
0  0