Annonce

Rduire
Aucune annonce.

PHP 7 deux fois plus rapide que PHP 5.4 : bilan de son potentiel et de ses nouveauts

Rduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • News PHP 7 deux fois plus rapide que PHP 5.4 : bilan de son potentiel et de ses nouveauts



    Le langage de programmation le plus utilis au monde connu sous le sigle PHP dont l'lphant est son symbole a dcid de tous craser sur son passage pour 2015.
    Les RFC qu'il a dvoils sur son site afin que les concepteurs puissent se prparer au changement vont permettre d'avoir un PHP plus efficace et surtout de gagner en vitesse.
    Plus de onze ans que l'on stagne sur PHP 5, il n'innove plus et devenait progressivement de plus en plus problmatique.
    Mais en octobre 2015, ils nous offrent une nouvelle mouture baptise 7 et non 6 qui va faire parler d'elle durant longtemps et mme faire oublier sa longue absence.
    On sort d'une priode dite de "Freeze" dans le milieu des concepteurs et des administrateurs rseau. J'entends par l que beaucoup de serveurs n'ont pas voulu aller jusqu' la version 5.6 de PHP, attendant que certains bugs soient rectifis.
    Cette version rvolutionnaire entrane un toll dans le monde informatique puisque l'on se demande ce qui a se passer pour les sites hbergs et autres plates-formes lorsque l'on va passer sous PHP 7.
    Normalement d'aprs ce que j'ai pu voir, on devrait passer PHP 7 sans trop de modifications.
    Alors quelles sont les innovations majeures ? Quels vont tre les inconvnients et les avantages suite ce passage ? Beaucoup de questions que je me pose, puisque mon blogue va dpendre de ces amliorations.
    Voyons ensemble PHP 7 et dcouvrons les points majeurs qui vont changer.

    Plus de vitesse





    La refactorisation de base prsente par la RFC PHPNPG rend PHP 7 aussi vite que (ou plus rapide que) HHVM. Rappelez-vous que la RFC tait prvue pour simplifier la transition vers la version 5.7 mais abandonne par 19 voix non contre 14 oui. On avait jug que les RFC gnraient des problmes majeurs de rtrocompatibilit.
    Pour PHP 7 cela a t repens et le rsultat est tout bonnement spectaculaire tout comme le montrent les graphes du site TalkPHP.




    On a un grand sourire en particulier les possesseurs de CMS comme Wordpress ou PHPbb qui double carrment sa vitesse et traite donc deux fois plus de requtes/secondes.

    Les changements relatifs PHP7


    Un certain nombre d'objets obsoltes ont t supprims. Cela pourrait, cependant, avoir un impact sur les applications existantes. Donc, il est important de bien faire attention aux nouvelles syntaxes qui risqueraient de dprcier vos applications PHP.

    Des premiers changements oprs

    Voici les toutes premires balises qui vont devoir rapidement quitter votre code source si ce n'est fait.
    En particulier les balises ASP :
    <%, <%= et %> ont t enlevs tout comme les balises script <script language="php">
    PHP 7 ne reconnaitra que plus la traditionnelle <? php et ?>.
    L'extension ereg et toutes les fonctions ereg_* associes devront tre remplac par l'extension PCRE : preg_* qui offrent beaucoup plus de fonctionnalits.

    Code PHP:
    <?%
    echo "Next step !";
    <? php
    echo "Next step !";
    if (ereg_replace)   devient    if (preg_replace)
    Et la fonction MySQL aussi qui passe de mysql_* dprci depuis PHP5.5 migre pour mysqli_*.

    Switch n'acceptera plus plusieurs dfaut. Au deuxime, c'est finis.
    Code PHP:
    switch ($expr) {
      default:
        
    neverExecuted();
        break;
      default:
        
    executed();

    Fatal error: Switch statements may only contain one default

    Vous devez prparer vos feuilles de style PHP ces changements qui ne subiront pas de tolrance de la part de PHP 7.
    Si les changements s'arrter l ce serait vraiment superflu, mais PHP 7 ne nous aura pas fait attendre 11 annes pour rien, voyons ensemble toutes les parties qu'offre sa nouvelle version.

    Abstract syntax tree

    https://wiki.php.net/rfc/abstract_syntax_tree


    Cette RFC propose l'introduction d'un arbre de syntaxe abstraite (AST) comme une structure intermdiaire dans notre processus de compilation. Cela remplace la pratique actuelle d'mettre opcodes directement partir de l'analyseur.

    Quels sont les principaux avantages ?

    D'aprs PHP, il offrirait 2 avantages :

    • Une performance accrut donc une vitesse optimise comme nous l'avons vue prcdemment.
    • Un analyseur de code statique utile pour dtecter des bugs ou des optimisations potentielles au niveau de la source de votre code PHP.
    • Une reprsentation intermdiaire du code pendant la compilation.

    De ce fait, on va avoir une performance sur la mmoire utilise et donc sur la performance de la machine sous PHP 7. Ces fonctions manques cruellement et sont avec UVS des plaques tournantes du PHP.
    Des modifications mineures ont t apportes la syntaxe des expressions courantes sous PHP, par exemple avec list().

    Code PHP:
    list ($array[], $array[], $array[]) = [123];
    var_dump ($array);
     
    // OLD: $array = [3, 2, 1]
    // NEW: $array = [1, 2, 3] 
    D'autres exemples de l'utilisation avec yield, list,… sont en place sur PHP ainsi que des mthodes d'implmentations.

    Uniforme Variable Syntaxe

    https://wiki.php.net/rfc/uniform_variable_syntax

    Cette RFC propose l'introduction d'une syntaxe de variable interne cohrente et complte. Pour atteindre cet objectif, la smantique de certaines constructions variables rarement utilises doit tre change. La syntaxe variable uniforme est destine rsoudre une partie des incohrences lors de l'valuation des variables.

    Les constructeurs PHP 4 sont dprcis

    Considrons le code suivant :

    Code PHP:
    <?php

    // classe de base, avec des proprits et des mthodes membres
    class Animal {

       public 
    $nom "Elephant" ;
       public 
    $type "PHP7" ;

       } 
    // fin de la classe Animal

       
    $Animal =new Animal() 
       
    $property = [ 'premier' => 'nom''deuxieme' => 'info" ] ;
       echo  "\nLe nom de cet animal est " . $Animal->$property ['
    premier'] . "\n\n";
    ?>
    Analysons le code ci-joint ensemble :
    On constate en PHP 5 que $Animal->$property ['premier'] correspond $Animal->nom.
    C'est assez incohrent cette accumulation de code pour affirmer une variable. On en vient dclarer une variable dans une variable. En ce moment, j'tudie assidment Python et je trouve qu'il montre plus de maturit sur ces points.
    Alors qu'en PHP7, $Animal->$property ['premier'] sera valu comme ($Animal->$property) ['premier'] et ne fonctionnera pas.

    Il nous le dmontre clairement sur le RFC :

    // old meaning // new meaning
    $$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz']
    $foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz']
    $foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']()
    Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()




    PHP 7 considre que les matrices du type $property ne sont plus prises en charge et ne peuvent plus tre converties en une chane.
    PHP 7 nous donne une solution succincte qui pourrait contenter actuellement PHP5 et 7 :

    Code PHP:
    global $$foo->bar;
    // instead use:
    global ${$foo->bar}; 
    Ce qui donnerait dans notre cas :
    $Animal->{$property) ['premier']}

    Pour aller plus loin, les associations imbriques
    PHP 7 permet des associations imbriques entre les oprateurs, chose que PHP 5 rfuter par une belle erreur d'analyse.

    On pourrait avoir des imbrications intressantes, mais des accs statiques seraient galement possibles du style :
    Echo "\n" . $Animal : : getNewAnimal () : : $service . "n\n";
    Tout est bien expliqu sur PHP ainsi qu'un patch permettant de nous guider lors de nos corrections.

    Des incompatibilits mais aussi des nouveauts.

    Des Mots Cls Rservs VIP


    Une srie de types seront rservs sous PHP 7, pour servir de nom de classe, traits et interfaces dont voici une liste :
    • int
    • float
    • bool
    • string
    • true, false
    • null
    • ressource
    • object
    • mixed
    • numeric

    Vous devrez l aussi patcher ceux que vous utilisez sinon vous aurez un beau Fatal Error en sortie.

    Oprateur de comparaison combine (Combined Comparison Operator)

    Cette nouveaut on l'a doit MrZ Poll.C'est un oprateur de comparaison qui s'crit ainsi :
    <=>
    Pour paraphraser son auteur :" Cela fonctionne efficacement comme strcmp(), ou version_compare(), renvoyant -1 si l’oprande gauche est plus petit que le droit, 0 s’ils sont gaux, et 1 si le gauche est plus grand que le droit. La diffrence majeure tant que cela peut tre utilis sur n’importe lequel des deux oprandes, pas seulement pour les strings, mais aussi les integers, floats, arrays, etc."

    Voici un exemple :
    Prenons 2 variables : $a <=> $b
    ($a < $b) ? -1 : (($a > $b) ? 1 : 0)
    Se traduit par si a < b = -1, a > b = 1 et a = b =0
    En PHP 7 on peut aller plus loin en proposant l'aide de l'oprateur null coalesce operator ??, la possibilit de vrifier que si une valeur est dfinie avant de l'utiliser.
    $a = $b ?? "default";
    Il va vrifier d'abord celle de gauche si elle est non NULL puis renverra l'opration sinon elle fera de mme avec celle de droite.



    Engine Exceptions

    Alors cette option toute simple (qui ressemble beaucoup au style Python) apporte une amlioration dans la gestion des erreurs.
    Elle limite un espace-temps pour permettre de grer proprement ses erreurs.
    La fonction try ajoute une exception notre fonction qui va attrape l'erreur fatale, attention toutefois non gre l'erreur normale apparatra ensuite.
    Plusieurs erreurs de parsing peuvent tre aussi attrapes avec la classe ParseException.

    Scalar type hinting

    PHP 7 permet dornavant de spcifier un type scalaire (string, boolean, integer, float) pour le type hinting.
    Pour activer la fonctionnalit, il suffit de rajouter en dbut du fichier :
    declare(strict_types=1); juste aprs <? Php

    Grouper les use

    La fonction use change, il est possible maintenant de grouper les espaces de noms avec le mme prfixe.
    <?php // Group the namespaces

    Code PHP:
    use Foo\Bar\Email;
    use 
    Foo\Bar\Phone;
    use 
    Foo\Bar\Address\Code;
    use 
    Foo\Bar\Address\Number;

    echo 
    "Next step !";
    ?> 
    devient

    Code PHP:
    <?php // Group the namespaces

    use Foo\Bar\{
        
    Email,
        
    Phone,
        
    Address\Code,
        
    Address\Number
    };

    echo 
    "Next step !";
    ?>
    2 Nouvelles Expression pour les retours Error


    La premire se nomme Generator Return Expressions. Cette RFC propose la capacit la fois de prciser les valeurs de retour accs Gnrateur tout en jetant les bases pour les rendements futurs sous-gnrateurs.
    Pour faire bref, si PHP 7 retourne une erreur alors avec Generator::getReturn(), vous rcuprer une valeur.

    La seconde se nomme Generator Delegation qui permet avec la syntaxe <expr> pour une structure itrable elle-mme d'tre traverse – que ce soit un array, un iterator, ou un autre generator.
    Les informations seront plus prcises sur le site de php avec des exemples concrets.



    Conclusion

    PHP 7 peut tre test sur le site tutoriel qui montre les anciennes fonctions utilises et les nouvelles. Vous retrouverez une certaine similarit avec mon article.
    Ce que l'on peut dire de PHP 7, c'est qu'il va permettre de nouvelles applications pour peu de BC break dans le fond.
    Une meilleure gestion des erreurs qui pour ma part est une partie nervante du PHP. J'entends des heures de dbogages une poque sur des CMS comme DLE Engine.
    Visiblement, la migration sera facile et rapide ce qui devrait contenter la plupart des concepteurs et srement permettre une migration en douceur.
    De quoi ravir tout le monde, moi le premier.
    Je vous invite continuer tudier ce nouveau PHP pour prendre de bonnes attitudes de programmation.

    Merci de m'avoir lu bientt.
    Dernire modification par fred, 12 octobre 2015, 11h43. Motif: fautes yeld remplac par yield (gnrateur)

  • #2
    Vivement PHP7, quelque soit les problmes d’incompatibilit a va balayer des annes de mauvaises pratiques.

    Sans tomber dans le travers de Ruby qui change tout d'une version l'autre, PHP souffre bien trop des fonctions deprecated qui induisent des mauvais pratiques et PHP7 commence faire le mnage (dj amorc avec PHP 5.4 et prcdents d'ailleurs).

    Le typage optionnel est vraiment quelque chose d’intressant, dj conquis avec le mme systme sous HHVM c'est quelque chose qui devient essentiel sur les gros projets, et pour une dveloppement plus efficace avec des IDE modernes.

    C'est amusant de voir PHP se complexifier, quitte perdre des utilisateurs pour devenir un langage plus "sr".

    Que de bonnes nouvelles pour moi en tous cas, en esprant que les merd*s mal codes (les CMS en gnral) disparaissent o revoient totalement leur code outdat depuis des sicles...

    Commentaire


    • #3
      Merci de ton retour sur l'article.

      En effet, PHP 7 montre une volont dpasser son cadre de langage "BUG" grce de nouvelles syntaxes permettant justement de les grer sans urgences.

      Il a peu d'incompatibilit par rapport au 5.4 et 5.6 mais ceux qui auront passer par des versions antrieures seront confronts d'norme souci d'intgration.

      HHVM qui a t contribu jusqu' prsent ne va pas encore perdre du terrain, PHP est dj largement utilis. Je ne pense pas que la complexit du PHP va tre un problme. J'ai regard et il essaie comme HTML 5 et 6 d'instaurer au contraire des simplifications mais aussi des valeurs plus largies. Alors est ce le fait que le nouveau PHP aura plus de marge de manoeuvre qui va instaurer une difficult, je ne pense pas au contraire.

      Pour ce qui sont des CMS, c'est et cela restera de la M***de jusqu' la fin des temps.

      Je n'arrive pas concevoir qu'un type se dise concepteur et travaille avec de nos jours comme on le voit sur des milliers de sites. J'ai mme vu des dveloppeurs qui tarifaient plus de 2000 € pour des mises en place de Wordpress, en faisant quelques modifs. et puis voilou.
      Wordpress, et Windows mme combat, runirent un ne dans le corps d'une limace.
      Il y a assez de solutions alternatives pour bosser efficacement comme utiliser des frameworks CSS,HTML et js puis les combiner en les personnalisant pour avoir sa propre struture de travail.

      Pour ce qui est du PHP, on peut aussi trs bien avec peu monter comme moi un site entirement PHP (engine), y inclure quelques frameworks CSS (style) et une infrastructure HTML (concordance) puis lance cela tranquille.

      Cela joue wordpress, cela claque Worpress, mais ce n'est pas du word presse.
      Mais voil encore, faut-il tre prt bidouille.

      A+++

      Commentaire


      • #4
        Bonjour tous, merci pour l'article.

        Je commence l'apprentissage de php 5.4. Donc j'en conclu que c'est un peu inutile ? Vaut mieux attendre avant de commencer apprendre ?

        Commentaire


        • #5
          Passer d'une version une autre d'un langage, cela se fait relativement rapidement. Tu peux donc d'aprs moi commencer apprendre.

          De plus, je pense avoir compris que c'est ton "premier" langage de programmation donc tu peux toujours t'y mettre. La base reste la base et ne change pas d'une version une autre du langage.

          Commentaire


          • #6
            D'accord c'est bon savoir, merci pour ta rponse.

            Commentaire


            • #7
              pour apprendre un langage de programmation le secret est simple, apprend dans cet ordre :

              .Algorithme , il est important de savoir poser une mthode, une fonction,...
              .C et ou C#
              .Python

              A partir de l, le monde des langages t paratra simple car en fait il est redondant de l'un l'autre. Tu aura toujours des variables, fontions, itrations, utilisation emplacement mmoire, web ,... donc tu te rendra compte que ormis la syntaxe, c'est du pareil au mme.

              Commentaire


              • #8
                Pour ragir ce que dit Dreamus, je n'utiliserais pas tout a fait le mme ordre.

                Je suis d'accord que l'algorithmique passe en premier mais je ferais suivre cela par le python (qui est plus proche des approches algorithmiques) avant de passer par un langage plus bas niveau.

                Et pour le fun Dreamus, renseigne toi sur le langage Haskell et la programmation fonctionnelle. La dedans, pas de variables ni d'itrations. C'est super puissant mais aussi un peu mystique. Je vous ferai peut tre un petit tutot dessus si j'ai le temps

                Commentaire


                • #9
                  Attention les gars pas trop vite s'il vous plat, je prcise une logique simple.

                  Pas besoin d'apprendre un autre langage de programmation pour apprendre le langage de programmation qu'on a choisi

                  En gros l'algorithmie est la seule tude pour comprendre le fonctionnement de tout styles de langages.

                  Par contre je suis d'accord avec Anonyme77 en ce qui concerne l'apprentissage de plusieurs paradigmes de programmation qui ont tous leurs utilits. Ayant tous une faon de penser diffrente, des faons de concevoir, analyser diffremment, on peut remarquer que nous avons des facilits dans un paradigme de programmation en particulier, c'est par celui-ci que l'on doit commencer.

                  Python a l'avantage d'tre multi paradigme, mais si on veut faire de la programmation fonctionnelle, alors je conseillerais Haskell...

                  Si je veux de la programmation objet, du Java, c++ et python...

                  Donc ne mlangeons pas tout, l'algorithmie c'est la reprsentation de tous les concepts existants dans un langage de programmation (exemple: les structures rptitives et itratives, les procdures et fonctions, ...). C'est lui qui entrane rsoudre un problme, le langage n'tant l que pour traduire notre analyse la rsolution.

                  P.S

                  Je commence l'apprentissage de php 5.4. Donc j'en conclu que c'est un peu inutile ? Vaut mieux attendre avant de commencer apprendre ?
                  Je connais pas PHP, mais si je dbute, j'attaque la version 7 tout de suite... mme pas rflchir, c'est la nouvelle mouture... Pour de l'application relle, commerciale ou autre, je choisirais une version aboutie comme la 5.4, c'est une question encore une fois de besoins.
                  Dernire modification par fred, 12 octobre 2015, 12h03.

                  Commentaire

                  Chargement...
                  X