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 !

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 , par Idelways

0PARTAGES

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

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

Avatar de Jcpan
Membre confirmé https://www.developpez.com
Le 10/08/2010 à 16:01
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
4  0 
Avatar de tfabien
Membre à l'essai https://www.developpez.com
Le 10/08/2010 à 16:25
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
$firstChild = $parent->getChildren()[0]
devrait etre écrit
Code : Sélectionner tout
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
5  1 
Avatar de revlis
Membre du Club https://www.developpez.com
Le 12/08/2010 à 8:33
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 : Sélectionner tout
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 : Sélectionner tout
$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...
4  0 
Avatar de _skip
Expert éminent https://www.developpez.com
Le 10/08/2010 à 15:40
Juste éviter de passer par une variable temporaire.
taper

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

Code : Sélectionner tout
1
2
$maVariableQuiPollue = $parent->getChildren()[0]
$firstChild = $maVariableQuiPollue[0];
3  0 
Avatar de X0000
Membre à l'essai https://www.developpez.com
Le 10/08/2010 à 20:05
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 ?
3  0 
Avatar de McBenny
Nouveau membre du Club https://www.developpez.com
Le 12/08/2010 à 21:17
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.
3  0 
Avatar de ThomasR
Membre expert https://www.developpez.com
Le 24/08/2010 à 13:29
Citation Envoyé par Jcpan Voir le message
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.
3  0 
Avatar de Causa Sui
Membre actif https://www.developpez.com
Le 10/08/2010 à 16:07
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).
2  0 
Avatar de spidermario
Membre éprouvé https://www.developpez.com
Le 10/08/2010 à 16:17
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.
2  0 
Avatar de lyrix
Nouveau membre du Club https://www.developpez.com
Le 10/08/2010 à 16:22
Je ne vois pas du tout pourquoi trouver cette méthode "brouillon". Je la trouve très pratique et l'attends avec impatience.
2  0