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 :

[POO] Surcharge d'opérateurs []


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut [POO] Surcharge d'opérateurs []
    Bonjour,

    Une petite question, qui se soldera fort probablement par un non catégorique, mais bon, qui ne tente rien n'a rien, n'est-ce-pas ?
    Existe-t-il un moyen en PHP de surcharger l'opérateur [] (qui permet d'accéder aux éléments d'un tableau) comme il est possible de le faire en C++ ?

    Merci

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    non catégorique !

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Points : 76
    Points
    76
    Par défaut
    Même en PHP 5 ? (moi pas encore avoir tester PHP5)

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    j ai pas essayé je l avoue la surcharge d opérateur, mais saches par exemple qu'elle n'existe pas en java.
    Et php 5 n'implemente pas encore tout le concept oo.
    Tu peux deja pas faire de methode polymorphe dans une classe.
    Et a priori il me semble bien qu'il y a pas de surcharge d opérateur.

    Pourquoi voulais tu les surcharger ?
    On peut peut etre te trouver une autre soluce

  5. #5
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut
    Oui, il y a d'autres solutions. Je possède en réalité une classe container qui contient une liste privée de valeurs. Pour des raisons essentiellement de clarté de code, j'aurais bien voulu pouvoir accéder à ces valeurs internes à l'aide d'une syntaxe basée sur les crochets plutôt que de devoir constamment utiliser des méthodes get/set.

    Enfin, c'est pas dramatique. Merci à vous !

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Foo {
       var $bar;
       ...
    }
     
    $o = new Foo();
    $o->bar;
    à adapter pour php5

  7. #7
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut
    oui, mais comme je souhaite travailler avec des variables membres privées (PHP5), et pour respecter le principe d'encapsulation de la POO, j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $myContainer->getValue($key);
    Par simple caprice, j'aurais bien voulu pouvoir faire ceci, simplement pour obtenir une syntaxe d'utilisation de mon objet la plus simple et la plus concise possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $myContainer[$key];
    Mais je vais me résoudre aux bonnes vieilles méthodes membres

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    J'ai un hack pour toi, il faut que je le retrouve

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    je suis peut etre a cote de la plaque mais a tu regarder du coté de ArrayAccess

  11. #11
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    terrible le transtypage, bravo Mr N.

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    interface ArrayAccess.

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par loufoque
    interface ArrayAccess.
    Tu peux développer ?

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    http://www.php.net/~helly/php/ext/spl/interfaceArrayAccess.html

  15. #15
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Mais encore, le rapport avec la question ?

  16. #16
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Ben ça permet de surcharger l'opérateur [], ce qui était justement la question.

    Je n'avais pas fait attention à jeff_!, qui l'avait déjà dit.

  17. #17
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Donc il suffit d'implémenter ArrayAccess et on peut parcourir les attributs de la classe grâce à [] ?
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    class Foo implements ArrayAccess {
       public $a;
       protected $b;
       private $c;
     
       function offsetExists ($offset){...}
       function offsetGet ($offset){...}
       function offsetSet ($offset, $value){...}
       function offsetUnset ($offset){...}
    }
     
    $o = new Foo();
     
    $o[0] //<<< $a
    $o[1] //<<< $b
    $o[2] //<<< $c
    ??? :

  18. #18
    Membre actif Avatar de hunter
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 208
    Points : 216
    Points
    216
    Par défaut
    Citation Envoyé par siddh
    mais saches par exemple qu'elle n'existe pas en java.
    tu te fou de moi : : biensur que la surcharge existe en java ...

  19. #19
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Donc il suffit d'implémenter ArrayAccess et on peut parcourir les attributs de la classe grâce à [] ?
    C'est quoi les attributs ?

  20. #20
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    attributs == membres de classe

Discussions similaires

  1. [POO] Surcharge de constructeur
    Par loganblack dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2006, 12h26
  2. [POO] Surcharge de fonctions en JS
    Par shuygar dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/04/2006, 08h13
  3. [POO] surcharge d'operateur
    Par wamania dans le forum Langage
    Réponses: 6
    Dernier message: 20/04/2006, 14h31
  4. [POO] surcharger le constructeur
    Par wdionysos dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 15h42
  5. [POO] Surcharge de méthode
    Par ouioui2000 dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2006, 15h25

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