Developpez.com

Le Club des Développeurs et IT Pro

La syntaxe PHP va évoluer avec la possibilité de déréférencer des tableaux

Pour ou contre ? Et quelle autre évolution souhaiteriez-vous ?

Le 2010-08-10 15:09:52, par Idelways, Expert éminent sénior
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 :
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
  Discussion forum
101 commentaires
  • Jcpan
    Membre confirmé
    Envoyé par odissey
    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
  • tfabien
    Membre à l'essai
    Envoyé par Jonathan Petitcolas
    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 :
    $firstChild = $parent->getChildren()[0]
    devrait etre écrit
    Code :
    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
  • revlis
    Membre du Club
    Toutes ces syntaxes existent déjà et je suis sur que nos projets ont au moins une de chaque sur différents éléments...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    $config['database']['passsword'];
    $config->database->passsword;
    $config->database()->passsword();
    $config['database']->passsword;
    $config['database']->passsword();
    $config->database['passsword'];
    $config->database->passsword();
    $config->database()->passsword;
    ne manque plus pour compléter la liste que ...
    Code :
    $config->database()['password'];
    Prétendre que le dernier est plus sale que tous les autres c'est de la mauvaise fois... toute simplification réduit forcement la lisibilité du code, au même titre que ($condition?$returnIfTrue:$returnIfFalse) et pourtant, on l'utilise tous, tous les jours...
  • _skip
    Expert éminent
    Juste éviter de passer par une variable temporaire.
    taper

    Code :
    $firstChild = $parent->getChildren()[0]
    Au lieu de

    Code :
    1
    2
    $maVariableQuiPollue = $parent->getChildren()[0]
    $firstChild = $maVariableQuiPollue[0];
  • X0000
    Membre à l'essai
    La question étant :
    Quelle évolution de la syntaxe de PHP souhaiteriez-vous ?

    Perso je trouve le PHP trop permissif (surtout venant de C++).
    Pourquoi pas faire comme en VB une option imposant la déclaration des variables avant toute utilisation, évitant le bug classique d'erreur de frappe du genre Mavariable et MaVariable.
    Imposer le typage de variable lors de sa déclaration ... un des fondement en programmation non ?
  • McBenny
    Nouveau membre du Club
    Je n'ai pas d'avis particulier sur cette proposition précise mais pour élargir le débat, comme proposé initialement, j'aimerais beaucoup que les fonctions de PHP soit "standardisées" tant en terme de nom qu'en terme d'ordre des paramètres.

    Nom des fonctions avec et sans "_" :
    Pourquoi a-t'on : strpos, strtolower, strlen... et str_replace, str_shuffle, str_split ?
    Pourquoi a-t'on : filesize, filetype, filemtime... et file_exists, file_get_contents et file_put_contents ?

    Je trouve ça stupide à l'utilisation.

    Ordre des paramètres :
    Le nombre de paramètre des fonctions n'est pas toujours le même, certes, mais il y a un élément récurrent presque à chaque fois, c'est l'objet sur lequel on applique la fonction, pourquoi n'est-il pas toujours à la même place ?

    str_replace($search, $replace, $variable)
    str_pos($variable, $debut, $fin)

    On ne me fera pas croire que cette différence a un intérêt dans le langage... Par contre je veux bien croire que changer cela risque d'être extrêmement délicat... sauf à créer de nouveaux alias dans une nouvelle version du langage peut-être, à déprécier les anciens noms de fonction puis à les faire disparaître dans une version ultérieure.
  • ThomasR
    Membre expert
    Envoyé par Jcpan
    Moi je ne aucune raison d'ajouter de nouvelle fonct° avant de finaliser un Unicode correct.
    Ce n'est pas une nouvelle fonction.

    Tous les contributeurs de PHP ne travaillent pas tous sur la même chose, je me réjouis qu'en parallèle d'implémentations comme l'Unicode certains travaillent sur d'autres améliorations celle dont il est question ici.
  • Causa Sui
    Membre actif
    Envoyé par odissey
    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).
  • spidermario
    Membre éprouvé
    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&#8217;il ne gère pas automatiquement cela.
  • lyrix
    Nouveau membre du Club
    Je ne vois pas du tout pourquoi trouver cette méthode "brouillon". Je la trouve très pratique et l'attends avec impatience.