IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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 devrait être rendu disponible vers la fin de cette année
Voici un aperçu des nouveautés qui pourraient y figurer

Le , par Coriolan

594PARTAGES

16  0 
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 :

Code : Sélectionner tout
1
2
3
4
5
6
class A
{
    public string $name;
    
    public Foo $foo;
}
Variation de type améliorée

Il sera possible d’utiliser des types de retour covariants :

Code : Sélectionner tout
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
    { /* … */ }
}
et des arguments contravariants :

Code : Sélectionner tout
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)
    { /* … */ }
}
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:

Code : Sélectionner tout
$data['date'] ??= new DateTime();
au lieu de ça :

Code : Sélectionner tout
$data['date'] = $data['date'] ?? new DateTime();
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

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

Avatar de rawsrc
Expert éminent sénior 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 stailer
Membre chevronné https://www.developpez.com
Le 18/01/2019 à 11:45
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 terrible

Code : Sélectionner tout
1
2
dates($maDate1, $maDate2, $maDate3 )
On gagne un peu en clarté sur la fonction mais l'utilisation on y perd clairement. Je préfère encore utiliser les commentaires de mon EDI qui me donne l'autocomplétion :

Code : Sélectionner tout
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]);
1  0 
Avatar de crozet.magenta
Membre averti https://www.developpez.com
Le 18/01/2019 à 14:31
oui 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[]
1  0 
Avatar de TheLastShot
Membre extrêmement actif https://www.developpez.com
Le 18/01/2019 à 16:01
Beau 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.
1  0 
Avatar de Zefling
Expert confirmé 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 grunk
Modérateur https://www.developpez.com
Le 22/06/2020 à 9:37
Citation Envoyé par Alexandre T Voir le message


La version 8 continue dans ce sens avec les types mixed, union type, le type de résultat de fonction (oublié en 7.4) "static" et surtout les constructeurs promouvants. Pour le coup ces constructeurs vont vraiment alléger le code !
Pour 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.
1  0 
Avatar de stailer
Membre chevronné https://www.developpez.com
Le 18/01/2019 à 9:21
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 : Sélectionner tout
public Foo $foo;
Mais est-ce qu'on pourra déclarer un type comme étant un tableaux d'objets ?
Par exemple :

Code : Sélectionner tout
public Foo[] $foo;
Si j'ai bien compris la liste complète de ce qui sera implémenté est ici :
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.
0  0 
Avatar de crozet.magenta
Membre averti https://www.developpez.com
Le 18/01/2019 à 10:27
Citation Envoyé par stailer Voir le message
Petite question : est-ce qu'on pourra déclarer un type comme étant un tableaux d'objets ?
Par exemple :

Code : Sélectionner tout
public Foo[] $foo;
ç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 retour

Code : Sélectionner tout
1
2
function dates(\DateTime ...$dates) {    //$dates contient un tableau de \DateTime
  }
0  0 
Avatar de SofEvans
Membre émérite 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