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, 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 : 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


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de stailer stailer - Membre chevronné http://www.developpez.com
le 14/08/2010 à 17:49
Personnellement je trouve cette évolution vraiment pratique... Je pense que dans mon top 10 des évolutions à faire sur php celle ci est en bonne place.

J'espère que d'autres arriveront bientôt, notamment celle sur la construction de propriétés à la C# ou java :

Code : Sélectionner tout
1
2
3
4
5
6
7
 
private string _persoProperty = ""; 
public string persoProperty 
{ 
    get { return _persoProperty; } 
    set { _persoProperty = value; } 
}
Vraiment pratique et fonctionnel en c#, j'aimerais beaucoup retrouvé ça en php.
Avatar de Perplexe Perplexe - Nouveau Candidat au Club http://www.developpez.com
le 15/08/2010 à 8:32
Citation Envoyé par Galak`  Voir le message
Et bien c'est simple, les instructions sont exécutées de la plus imbriquées à la moins imbriquée (dans l'ordre logique d'interprétation). Donc dans func1(func2()), func2 sera exécutée, et son résultat sera passé en paramètre à func1 (c'est logique, func1 a besoin de connaitre le résultat de func2 pour pouvoir être exécutée).C'est pareil avec le foreach, la fonction est exécutée, puis le foreach sur le résultat de celle-ci. C'est une base, si tu ne la comprends pas, tu vas vite être dépassé.

Je comprends maintenant (merci de m'aider à rester dans le coup )

Citation Envoyé par Galak`  Voir le message
Et puis quand on poste, en général, on jette au moins un oeil à ce qu'on a posté, et on voit du premier coup d'oeil les quotes foirés, qu'on corrige

Désolé : j'ai posté à partir de mon téléphone et je m'étais promis de revenir corriger l'erreur.
Avatar de sabotage sabotage - Modérateur http://www.developpez.com
le 15/08/2010 à 12:09
round(0.575,2) renvoie 0.57 (avec BCMathsupport 'enabled'; qu'est-ce que ce serait avec 'disabled'...)

round() n'est pas une fonction BCMath.

Sinon sur le fond, je ne pense pas qu'on arrête la progression d'un langage tant qu'il a des bugs ; ca fait partie de deux démarches distinctes.
Dans ce que tu cites, c'est de toute façon hors propos puisque si problème il y avait, il n'existe plus maintenant, donc on peut avancer.
Avatar de graphiks graphiks - Membre régulier http://www.developpez.com
le 17/08/2010 à 9:38
Bonjour

Est-ce que ça veux dire que l'on appel la fonction chaque fois ?

Genre $parent->getChildren()[0]
et plus loin $parent->getChildren()[1]

Ce sera deux appels distinct de la méthode getChildren ?

Si oui, ce sera pas toujours judicieux de l'utiliser dans un contexte ou il faut beaucoup d'optimisation.

A voir, mais ça me semble bien pratique dans certain cas de figure !
Avatar de ThomasR ThomasR - Membre expert http://www.developpez.com
le 17/08/2010 à 11:01
Citation Envoyé par graphiks  Voir le message
Bonjour

Est-ce que ça veux dire que l'on appel la fonction chaque fois ?

Genre $parent->getChildren()[0]
et plus loin $parent->getChildren()[1]

Ce sera deux appels distinct de la méthode getChildren ?

Bien sûr.
Citation Envoyé par graphiks  Voir le message
Si oui, ce sera pas toujours judicieux de l'utiliser dans un contexte ou il faut beaucoup d'optimisation.
A voir, mais ça me semble bien pratique dans certain cas de figure !

Exact !
Avatar de sergy-info sergy-info - Nouveau Candidat au Club http://www.developpez.com
le 18/08/2010 à 22:50
c'est tres bon adjonction pour moi!
par example, maintenant on peut écrire
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
function TOTAL($a,$b){ 
return $a+$b; 
} 
 
function Difference($a,$b){ 
return $a-$b; 
} 
 
echo TOTAL*Difference;
et la nouvelle version
Code : Sélectionner tout
1
2
3
4
5
6
$f=function all($a,$b){ 
$arr[]=$a+b; 
$arr[]=$a-b; 
return $arr; 
} 
echo $f[0]*$f[1];
Je l'aime beaucoup!!
Avatar de ThomasR ThomasR - Membre expert http://www.developpez.com
le 19/08/2010 à 12:54
Citation Envoyé par sergy-info  Voir le message
c'est tres bon adjonction pour moi!
par example, maintenant on peut écrire
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
function TOTAL($a,$b){ 
return $a+$b; 
} 
 
function Difference($a,$b){ 
return $a-$b; 
} 
 
echo TOTAL*Difference;

Ha bon ? Tu n'oublies pas de passer des paramètres ? Du coup je ne vois pas le rapport avec le sujet courant.
Code : Sélectionner tout
1
2
 
echo (Total(10, 20) * Difference(10, 20));
Citation Envoyé par sergy-info  Voir le message
et la nouvelle version
Code : Sélectionner tout
1
2
3
4
5
6
$f=function all($a,$b){ 
$arr[]=$a+b; 
$arr[]=$a-b; 
return $arr; 
} 
echo $f[0]*$f[1];

Ca ne fonctionnera pas çà, si ? Tu ne passes pas de paramètes à ta fonction, tu ne met pas de parenthèses et ca ferait deux appels donc c'est naze.
Code : Sélectionner tout
1
2
 
echo $f($a, $b)[0] * $f($a, $b)[1];
donc autant faire à l'ancienne pour ton exemple, c'est plus performant :
Code : Sélectionner tout
1
2
3
 
$arr = $f($a, $b); 
echo $f[0] * $f[1];
Avatar de Jcpan Jcpan - Membre averti http://www.developpez.com
le 24/08/2010 à 13:10
Moi je ne aucune raison d'ajouter de nouvelle fonct° avant de finaliser un Unicode correct.
Avatar de ThomasR ThomasR - Membre expert http://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.
Avatar de elderion elderion - Membre régulier http://www.developpez.com
le 19/09/2010 à 22:01
stailer :
pour les getters/setters on peut se debrouiller avec les fonctions __get et __set
mais une synatxe C#-lke serait bienvenue.
Moi j'attend la migration des primitives en objet et la surcharge d'operateuts qui va avec...comme en C# et Java en fait...
Avatar de stailer stailer - Membre chevronné http://www.developpez.com
le 20/09/2010 à 10:20
Je sais pour les __get et __set, c'est à chaque fois ce que l'on me dit
Mais c'est bricolage...
Offres d'emploi IT
Développeur android pour l’objet connecté du moment h/f
Mobiskill - Ile de France - Paris (75000)
QA engineer H/F
MeilleursAgents.com - Ile de France - Paris (75000)
développeur Asp.net MVC - H/F
EASY PARTNER - Ile de France - Courbevoie

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil