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. #21
    Membre chevronné
    Profil pro
    Développeur Java Indépendant
    Inscrit en
    Mai 2007
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java Indépendant

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 333
    Points : 2 061
    Points
    2 061
    Par défaut
    Je trouve ça hallucinant d'accéder à un tableau sans tester sa taille et le fait qu'il soit non null...

  2. #22
    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 : 39
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    Citation Envoyé par dolu02 Voir le message
    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
    !?
    Sisi, tu la mets protected, mais dans le __get() tu la retournes quand même. Le protected sert à obliger l'appelant de passer au travers de __get() ou tu peux faire certains traitement additionnel.

  3. #23
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    je pense que la fondation qui s'occupe de faire évoluer PHP devrait plutôt s'occuper à normaliser le langage et nous fournir un outil capable de gérer l'UNICODE correctement plutôt que de pourrir le langage avec des constructions aussi stupides que inutiles.

  4. #24
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut
    Citation Envoyé par octal Voir le message
    je pense que la fondation qui s'occupe de faire évoluer PHP devrait plutôt s'occuper à normaliser le langage et nous fournir un outil capable de gérer l'UNICODE correctement plutôt que de pourrir le langage avec des constructions aussi stupides que inutiles.
    Il vient de présenter sur son blog une nouveauté qui sera intégrée aux versions futures du langage
    Ce n'est qu'une nouveauté parmi d'autres...

  5. #25
    Membre averti

    Inscrit en
    Octobre 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 363
    Points : 417
    Points
    417
    Par défaut
    visuellement ça choque quand même un peu. Sachant qu'on peut déjà lancer des fonctions d'objet qui serait lui même un résultat d'une fonction d'un objet parent... un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $barofsubfoo = $foo->functionToGetSubFoo()->functionOfSubFoo()
    Mais tout développeur sait qu'il ne faut pas rester fixé sur une méthode de dev s'il y a possibilité de faire mieux/propre/optimisé, donc si cette méthode permet moins d'utilisation mémoire et une charge serveur moins importante alors pourquoi pas, au pire ça sera plus rigolo à débugger

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 195
    Points : 511
    Points
    511
    Par défaut
    Personnellement appeler une fonction d'un objet issu d'un retour d'une fonction ne m'a jamais choqué, après faut qu'en amont ça soit bien codé pour être sur que telles fonctions renvoient systématiquement tels objets.

  7. #27
    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 : 475
    Points
    475
    Par défaut
    Citation Envoyé par tfabien Voir le message
    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
    euh si tu veux faire du n'importe c'est pas le langage qui va t'empêcher

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 195
    Points : 511
    Points
    511
    Par défaut
    De toute façon que le langage sois permissif ou pas, si tu veux sortir des aberration tu peux toujours.

  9. #29
    Membre régulier
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Points : 91
    Points
    91
    Par défaut
    Je suis absolument pas opposé à ce genre de nouveauté, surtout que j'ai déjà plusieurs fois essayé de faire ce genre de chose, quand on passe du JS à PHP ^^
    Et pis personnellement j'attends surtout du PHP Full POO, où on n'aurait des chaînes de caractères traitable comme des tableaux, etc.

    Au moins on pourra faire du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $func = function() { return new Array('a', 'b', 'c'); };
     
    for( $i = 0; $i < $func()->length; $i++ )
      echo $func()[$i];

  10. #30
    Membre averti

    Inscrit en
    Octobre 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 363
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par GanYoshi Voir le message
    Je trouve ça hallucinant d'accéder à un tableau sans tester sa taille et le fait qu'il soit non null...
    Ca ne m'avait même pas effleuré l'esprit mais je suis complétement d'accord. C'est une prise de risque même si le dev est sûr de son code.

    Et s'il faut tester un tableau avant de l'utiliser il finira indubitablement dans une variable (à moins d'appeler deux fois de suite la même fonction qui renverra le même résultat... mais faudra voir à changer de métier dans ce cas).

    Donc fonctionnalité complétement inutile...

    edit: sauf en cas de stockage en $GLOBALS lors du premier rappel ^^

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 21
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par tfabien Voir le message
    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

    Ton code plante aussi lorsque la fonction retourne un objet et non un array()
    Il est d'usage de savoir ce que retourne une fonction avant de vouloir l'utiliser.
    getChildrens pourrait systématiquement retourner un array() (vide quand il n'y a rien)...


    personnellement, j'aimerais que cela soit porté aussi aux constructeurs, je trouve que le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $items[] = (new Item())->setId(123)->setName('hello');
    plus lisible que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $item = new Item();
    $item->setId(123)->setName('hello');
    $items[] = $item;

  12. #32
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par octal Voir le message
    je pense que la fondation qui s'occupe de faire évoluer PHP devrait plutôt s'occuper à normaliser le langage et nous fournir un outil capable de gérer l'UNICODE correctement plutôt que de pourrir le langage avec des constructions aussi stupides que inutiles.
    +1

  13. #33
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut
    Moi je préfère voir le problème dans l'autre sens : Pourquoi devrait-on se passer de cette fonctionnalité ?


    - Car cela fait du code "pas propre"?
    Faux, on sait tous que du code pas propre si on en veut, on en fait.

    - Car cela peut provoquer des erreurs d'accès au tableau ?
    Faux, c'est pareil avec les variables.

    - Car cela obligerait tout le monde a l'utiliser ?
    Faux, la méthode actuelle reste valide.


    Le calcul est vite fait..

  14. #34
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 16
    Points : 24
    Points
    24
    Par défaut
    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 ?

  15. #35
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par tfabien Voir le message
    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
    On peut faire un switch.

  16. #36
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par X0000 Voir le message
    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 ?
    +1

    J'ai programmé en Java et en VB et pour ma part, je trouve que l'obligation de la déclaration des variables est un fondement de la programmation (et une fois l'habitude prise, ce n'est pas si contraignant que cela). de plus, comme c'est dis plus haut, la possibilité d'obliger la déclaration des variables (voir leur initialisation) ne serait pas gênant, puisque facultatif.

    Pour ce qui est de la nouvelle fonctionnalité, pourquoi pas? Moi je ne l'utiliserais pas dans tout les cas car cela va à l'encontre des bonnes pratiques que je me suis fixées, mais si cela plait à d'autre pourquoi pas?

  17. #37
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 93
    Points : 109
    Points
    109
    Par défaut
    C'est marrant mais c'est un truc qui m'emmerdait depuis hier, où naturellement j'écrivais comme ça et ........ euh ça marchait pas!

    Je ne vois pas vraiment pourquoi on empêcherait de faire ça, la valeur de retour de ma fonction est un tableau, pourquoi est-ce que je ne peux pas directement travailler sur ce tableau, pourquoi dois-je passer par une variable intermédiaire?

    Quand ma fonction me renvoie un objet, je peux bien directement à la fin de la fonction enchainer une méthode qui agit sur la valeur de retour.
    Quand on me renvoie un entier, je peux aussi l'utiliser directement au milieu d'une addition.
    Pourquoi le cas des tableaux est-il différent?

  18. #38
    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 : 39
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    Ca me fait bien marrer les remarques "PHP est trop permissif", alors que les grosses critiques qui ont été faites à l'encontre de langages lourds de POO (et dans cette catégorie Java reçoit la palme), c'est la "verbosité"... il faut 100 lignes de Java pour faire 5 lignes de Ruby...

    Alors oui, c'est pas pareil de programmer en PHP et en Java... et après ? Les langages ne sont pas censés être tous exactement les mêmes. Sinon la vie de programmeur serait bien triste

    Je code professionnellement en .NET, Java et PHP, et j'aime ces trois langages pour des raisons différentes. A chaque ses forces et faiblesses

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

    Informations forums :
    Inscription : Avril 2003
    Messages : 121
    Points : 95
    Points
    95
    Par défaut
    sauf qu'ajouter à PHP un mode "strict" de déclaration de variable comme décrit par Dimitri S., mode activable ou désactivable (pour garder la compatibilité avec les projets actuels) ne rajouterait pas tant de verbosité que cela.

  20. #40
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    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.
    La quantité de mémoire utilisée n'est pas proportionnelle au nombre de variables dans ton code.

    Quand tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $item = getMyArray()[i];
    getMyArray() te renvoie, de toute façon, un tableau complet, et tu récupères ensuite le ième élément.
    Si ton tableau comporte 1000 entrées, tu l'utilises à 0.1%... 99.9% de généré pour rien donc.

    C'est clair que ça te permet d'optimiser ton code...

Discussions similaires

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

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