Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités

    PHP 7.4.0 est disponible avec de nombreuses améliorations et de nouvelles fonctionnalités
    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

    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 -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    $data['date'] ??= new DateTime();


    au lieu de ça :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $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
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Membre 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 :Sélectionner tout -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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.
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  3. #3
    Membre averti
    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 :

    ç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 -Visualiser dans une fenêtre à part
    1
    2
    function dates(\DateTime ...$dates) {    //$dates contient un tableau de \DateTime
      }
    n'oubliez pas de voter si le message vous a aidé


  4. #4
    Membre 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 terrible

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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]);
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  5. #5
    Membre averti
    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[]
    n'oubliez pas de voter si le message vous a aidé


  6. #6
    Membre extrêmement actif
    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.
    J'ai fais des fautes dans mon message ? Bah ça arrive... Tout le monde fait des fautes, je ne fais pas exception. Des fois parce que j'écris trop vite, parfois parce que je suis fatiguée, parfois parce que je ne me relis pas parce que je n'ai pas le temps, ou la flemme (genre à 4h du matin).
    Alors si vous voulez me répondre sur le fond de mon message en glissant un petit "fait attention aux fautes" OK. Mais si votre message consiste juste à surligner toutes les fautes comme un maniaque, sans rien apporter à la discussion, faites-le par MP, ça évitera de polluer.
    Merci

  7. #7
    Chroniqueur Actualités

    PHP 7.4.0 est disponible avec de nombreuses améliorations et de nouvelles fonctionnalités
    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

    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 -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  8. #8
    Expert éminent sénior
    Et un sacré sucre syntaxique (opérateur d'assignation sur valeur null) :
    Avant PHP 7.4 :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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

  9. #9
    Membre chevronné
    Euh, c'était pas possible de faire

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $array['key'] = $array['key'] ?? computeDefault();


    avant php7.4 ?

  10. #10
    Expert éminent sénior
    si, toutafé, mais t'avoueras que c'est vilain : $a = $a...

  11. #11
    Membre actif
    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 -Visualiser dans une fenêtre à part
    1
    2
    $longVariableName['property name']['key name'] = $longVariableName['property name']['key name'] ?? computeDefault();
    $longVariableName['property name']['key name'] ??= computeDefault();

  12. #12
    Expert éminent sénior
    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.

  13. #13
    Expert confirmé
    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 -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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();

  14. #14
    Membre extrêmement actif
    Les propriétés typées, enfin, ça va sacrément simplifier la prise en charge par les IDE.
    Citation Envoyé par Un expert en programmation
    D'ailleurs il croit toujours que le JS c'est de la POO

  15. #15
    Modératrice

    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 -Visualiser dans une fenêtre à part
    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
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  16. #16
    Expert éminent sénior
    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 !

  17. #17
    Membre confirmé
    il y perd son charme et son âme...
    Depuis quelques années PHP est en train de devenir une copie de Java ou de C# et à mon sens il y perd son charme et son âme.

  18. #18
    Membre extrêmement actif
    Donc pour "l'âme" de PHP c'est de programmer à la yolo ?
    Citation Envoyé par Un expert en programmation
    D'ailleurs il croit toujours que le JS c'est de la POO

  19. #19
    Membre émérite
    Citation Envoyé par Jcpan Voir le message
    Depuis quelques années PHP est en train de devenir une copie de Java ou de C# et à mon sens il y perd son charme et son âme.
    Je ne suis pas d'accord avec toi. Le développeur peut toujours coder sans typage fort s'il y tient. Je ne le recommande pas, mais il peut le faire, ce que Java ne permet pas.

    Citation Envoyé par Sodium Voir le message
    Donc pour "l'âme" de PHP c'est de programmer à la yolo ?
    Bonne synthèse, c'est à cause de l'absence de typage fort que ce langage a été fortement critiqué au départ, alors qu'il s'impose sur le web.

    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 !
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  20. #20
    Modérateur

    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.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

###raw>template_hook.ano_emploi###