IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Langage PHP Discussion :

La syntaxe du PHP évolue avec la possibilité de déréférencer des tableaux : pour ou contre ?


Sujet :

Langage PHP

  1. #1
    Expert éminent sénior
    Avatar de Idelways
    Homme Profil pro
    Développeur Ruby on Rails / iOS
    Inscrit en
    juin 2010
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Ruby on Rails / iOS

    Informations forums :
    Inscription : juin 2010
    Messages : 1 374
    Points : 68 508
    Points
    68 508
    Par défaut La syntaxe du PHP évolue avec la possibilité de déréférencer des tableaux : pour ou contre ?
    Quelle évolution de la syntaxe de PHP souhaiteriez-vous ?
    Déréférencement, éviction du « dollar », tableaux sans Array ou une autre ?



    PHP offre un large panel de possibilités mais sa syntaxe est relativement rigide et (pour certains) « verbeuse » comparée aux autres langages dynamiques concurrents.

    Johannes Schlüter travaille sur MySQL à Oracle/Sun et fait partie de la core-team (l'équipe de développement) de PHP. Il vient de présenter sur son blog une nouveauté qui sera intégrée aux versions futures du langage (5.4 ou 6, il ne précise pas).

    Il s'agit de la possibilité de déréférencer des tableaux. Comme parfois un bout de code peut en dire plus qu'un long discours, il sera possible de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $func = function() { return array('a', 'b', 'c'); };
    echo $func()[0]; // prints a
    ?>
    Alors qu'avant, la déclaration d'une $variable intermédiaire était obligatoire, cette nouveautés permettra plus de flexibilité lors de la programmation objet en PHP.

    L'annonce de cette fonctionnalité soulève à la fois enthousiasme et critiques dans la communauté qui semble extrêmement partagée sur cette évolution.

    Votre avis nous intéresse donc sur cette question : êtes-vous pour ou contre.

    Et plus généralement, quelles sont les possibilités que vous souhaiteriez voir apparaitre dans les prochaines versions de PHP ?


    Sources : Blog de Johannes Schlüter

    Lire aussi :

    Quelle est la solution PHP la plus obscure que vous ayez utilisée ? Scripts, CMS maisons ou langages "PHP-Killer" ?

    Avez-vous inventé des termes que seuls vous et votre équipe comprenez ? Drôles ou techniques, expliquez-les nous

    Les rubriques (actu, forums, tutos) de Développez :

    PHP
    Développement WEB
    Langages

  2. #2
    Membre régulier
    Inscrit en
    avril 2003
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : avril 2003
    Messages : 121
    Points : 95
    Points
    95
    Par défaut
    J'ai du mal à voir l'intérêt de cette syntaxe.

  3. #3
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : novembre 2005
    Messages : 2 898
    Points : 7 611
    Points
    7 611
    Par défaut
    Juste éviter de passer par une variable temporaire.
    taper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $firstChild = $parent->getChildren()[0]
    Au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $maVariableQuiPollue = $parent->getChildren()[0]
    $firstChild = $maVariableQuiPollue[0];

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    662
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : juillet 2005
    Messages : 662
    Points : 1 518
    Points
    1 518
    Par défaut
    Je trouve que niveau lisibilité c'est pas top moi

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    mars 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2007
    Messages : 163
    Points : 295
    Points
    295
    Par défaut
    Ça m'est déjà arrivé de râler parce que ça n'était pas possible de faire ça!
    Et je ne programme qu'en PHP.

    Est-ce que ça engendre d'autres problèmes? Moi je n'en vois pas.

  6. #6
    Membre régulier
    Inscrit en
    avril 2003
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : avril 2003
    Messages : 121
    Points : 95
    Points
    95
    Par défaut
    je demande juste :
    et pourquoi ne pas faire en sorte que la fonction en question accepte un offset en paramètre comme on peut le faire depuis des lustres ?. on aurait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $var = $parent->getChildren(0);
    plus clair à mon sens que de rajoute cette syntaxe, qui supprime une ligne de code, pas forcément inutile puisqu'elle rend le code plus compréhensible.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    C'est pas tant la visibilité qui m'interpelle, pour ma part, c'est plus le fait que:
    1 - Ce genre de "raccourci" incite au code brouillon
    2 - Une source de bug potentielle

  8. #8
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : août 2008
    Messages : 542
    Points : 473
    Points
    473
    Par défaut
    Citation Envoyé par odissey Voir le message
    C'est pas tant la visibilité qui m'interpelle, pour ma part, c'est plus le fait que:
    1 - Ce genre de "raccourci" incite au code brouillon
    2 - Une source de bug potentielle
    rien n'oblige à l'utiliser

  9. #9
    Membre averti

    Inscrit en
    novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : novembre 2007
    Messages : 197
    Points : 362
    Points
    362
    Par défaut
    Pour ma part cela semble fort interessant. Ce n'est certe pas une révolution, mais j'aime d'autant mieux cette syntaxe que l'utilisation d'une variable temporaire. Quand on sait qu'une fonction retourne un tableau j'aime bien l'utiliser immédiatement comme tel (comme lorsqu'une fonction retourne un objet).
    ______________
    Never underestimated the browser
    Ne jamais sous-estimé le navigateur
    Vic Gundotra, Google IO 2009

  10. #10
    Membre actif Avatar de Causa Sui
    Inscrit en
    mai 2003
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 133
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par odissey Voir le message
    C'est pas tant la visibilité qui m'interpelle, pour ma part, c'est plus le fait que:
    1 - Ce genre de "raccourci" incite au code brouillon
    2 - Une source de bug potentielle
    ... accessoirement aussi moins de code à taper, la possibilité d’une optimisation en interne (suppression d’une référence).

    J'ai encore râlé il n'y a pas une heure parce que ça n'existait pas*; et qui plus est, cette syntaxe est tout à fait logique et courante (notamment en Ruby ou en Javascript pour ne citer qu’eux).

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    juillet 2010
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2010
    Messages : 195
    Points : 511
    Points
    511
    Par défaut
    vraiment pratique quand on veut récuperer que certains élément du tableau retourné.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    juillet 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juillet 2009
    Messages : 23
    Points : 31
    Points
    31
    Par défaut
    Je ne vois pas bien les problèmes que cette écriture peut engendrer ? Si quelqu'un pouvait m'éclairer là-dessus ?

    Car, au contraire, cela évite de passer par une variable temporaire, et donc de faire une économie de mémoire. J'ai été très étonné que PHP n'accepte pas cette écriture il y a de cela quelques temps, écriture que je trouve... naturelle.

    Par contre, le nom donné... "déréférencement de tableaux"... C'est du lourd ! ^^

  13. #13
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : septembre 2006
    Messages : 519
    Points : 1 052
    Points
    1 052
    Par défaut
    Je me permets de citer un commentaire sur le lien de reddit.com :
    I always wondered what PHP's parser must look like if it doesn't automatically support this
    Traduction :
    Je me suis toujours demandé à quoi doit ressembler le parser de PHP, s’il ne gère pas automatiquement cela.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juin 2007
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Je ne vois pas du tout pourquoi trouver cette méthode "brouillon". Je la trouve très pratique et l'attends avec impatience.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 3
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Jonathan Petitcolas Voir le message
    Je ne vois pas bien les problèmes que cette écriture peut engendrer ? Si quelqu'un pouvait m'éclairer là-dessus ?

    Car, au contraire, cela évite de passer par une variable temporaire, et donc de faire une économie de mémoire. J'ai été très étonné que PHP n'accepte pas cette écriture il y a de cela quelques temps, écriture que je trouve... naturelle.

    Par contre, le nom donné... "déréférencement de tableaux"... C'est du lourd ! ^^
    Juste que la fonction n'a pas intérêt à retourner "null" ...

    il est d'usage de tester le retour des fonctions avant de l'utiliser...et pour cela on a besoin d'une variable temporaire si on ne veut pas invoquer la fonction deux fois

    En somme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $firstChild = $parent->getChildren()[0]
    devrait etre écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $children = $parent->getChildren();
    if ($children != null)
       $firstChild = $children[0];
    En outre si on n'utilise jamais que le premier element d'une liste retournée par une fonction, c'est qu'on a quelque part un probleme d'architecture....

    Cela dit PHP a toujours été un langage permissif et c'est une de ses forces, dans le cadre d'un développement "script" ou on est "quasi-certain" du retour, cela reste acceptable, mais il est comme toujours necessaire de comprendre le probleme éventuel que peut poser cette confiance aveugle

  16. #16
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2006
    Messages : 199
    Points : 492
    Points
    492
    Par défaut
    Très content de cette nouvelle syntaxe. Très utilisé en Javascript dans les parcours de DOM, j'y vois une facilité de langage vraiment utile. Pour ma part j'espère surtout que ce changement permettra également la syntaxe simplifiée foreach directement sur un champ de type tableau lors d'un passage à travers un __get().

    Actuellement il n'est pas possible d'écrire foreach($object->table as ...) selon le type de visibilité des champs de l'objet. Je suppose que la nouvelle syntaxe devrait permettre ça.
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  17. #17
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2006
    Messages : 199
    Points : 492
    Points
    492
    Par défaut
    et pour cela on a besoin d'une variable temporaire si on ne veut pas invoquer la fonction deux fois
    on peut très bien faire un test "count() && ..." sur le tableau. Appeler 2 fois ne pose pas de problème tant que le résultat n'est pas re-calculé et doublé dans la mémoire par le second appel. Le retour d'une table se faisant par référence, appeler 2 fois sur un champ d'objet par exemple ne me paraît pas gourmant en ressources.

    Citation Envoyé par tfabien Voir le message

    En outre si on n'utilise jamais que le premier element d'une liste retournée par une fonction, c'est qu'on a qqpart un probleme d'architecture....
    Je pense que tu peux remplacer [0] par [i] ou [$object->var] ou nimporte quel autre appel retournant string ou integer.
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 3
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Lordsephiroth Voir le message
    Je pense que tu peux remplacer [0] par [i] ou [$object->var] ou nimporte quel autre appel retournant string ou integer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for ($i=0; $i < $parent->getChildren()[$i] != null; $i++)
       print $parent->getChildren()[$i];
    Combien de fois est appellée la fonction getChildren?
    Si derriere elle va chercher les données en base ca peut vite devenir un souci

    D'ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $children = $parent->getChildren();
    for ($i=0; $children != null && $children[$i] != null; $i++)
       print $children[$i];
    Dans un cadre clef->valeur ca peut etre plus interessant/acceptable effectivement

  19. #19
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2006
    Messages : 199
    Points : 492
    Points
    492
    Par défaut
    Citation Envoyé par tfabien Voir le message
    Si derriere elle va chercher les données en base ca peut vite devenir un souci
    En fait je me focalise sur mon exemple de la syntaxe foreach() pour un champ d'objet private ou protected retourné par __get(). Cette syntaxe m'a toujours cruellement manqué et comme __get() retourne juste par référence un champ d'objet de type tableau, il n'y a pas de soucis à le faire.

    Gaffe à l'appel de base de données en effet.

    Edit : j'avoue que je n'ai pas la moindre idée si le changement de syntaxe permettra la syntaxe simplifiée foreach() pour les champs protected ou private, mais je suppose que c'est lié... le foreach doit bien être traduit par un for standard avec un appel [i] en pré-processing...
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  20. #20
    Membre actif
    Homme Profil pro
    Inscrit en
    mars 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2007
    Messages : 163
    Points : 295
    Points
    295
    Par défaut
    Citation Envoyé par Lordsephiroth Voir le message
    Actuellement il n'est pas possible d'écrire foreach($object->table as ...) selon le type de visibilité des champs de l'objet. Je suppose que la nouvelle syntaxe devrait permettre ça.
    C'est plutôt logique de ne pas pouvoir accéder directement à une propriété d'object si elle est en protected ou private.
    Et je ne vois pas en quoi cette nouvelle syntaxe changerait la donne
    !?

Discussions similaires

  1. syntaxe php fonction avec crochets
    Par xstier dans le forum Langage
    Réponses: 1
    Dernier message: 16/11/2010, 00h30
  2. syntaxe php fonction avec crochets
    Par xstier dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2010, 23h32
  3. Réponses: 39
    Dernier message: 11/08/2010, 10h28
  4. [PHP]problème avec strftime()...
    Par sanosuke85 dans le forum Langage
    Réponses: 5
    Dernier message: 26/05/2005, 11h02
  5. Réponses: 2
    Dernier message: 19/08/2004, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo