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 :

IteratorAggregate, quel interet?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut IteratorAggregate, quel interet?
    Salut,

    Je comprends pas l'interet d'Iterator aggregate quelqu'un peut m'éclairer?

    Dans la docs y'a un exemple :
    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
    18
    19
    20
    class myData implements IteratorAggregate {
        public $property1 = "Propriété publique numéro un";
        public $property2 = "Propriété publique numéro deux";
        public $property3 = "Propriété publique numéro trois";
     
        public function __construct() {
            $this->property4 = "dernière propriété";
        }
     
        public function getIterator() {
            return new ArrayIterator($this);
        }
    }
     
    $obj = new myData;
     
    foreach($obj as $key => $value) {
        var_dump($key, $value);
        echo "\n";
    }
    Mais si j'enleve l'implementation :

    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 myData2 {
        public $property1 = "Propriété publique numéro un";
        public $property2 = "Propriété publique numéro deux";
        public $property3 = "Propriété publique numéro trois";
     
        public function __construct() {
            $this->property4 = "dernière propriété";
        }
    }
     
    $obj2 = new myData2;
     
    foreach($obj2 as $key => $value) {
        var_dump($key, $value);
        echo "\n";
    }
    ca ne change absolument rien a mon résultat en sortie :/
    Je comprend pas tout je crois

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Parce que tu n'utilises qu'une fonctionnalité de l'itérateur.
    Ca devient intéressant lorsqu'il s'agit de faire une navigation un peu plus compliquée (utilisation de rewind() par exemple).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    "JE" n'utilise rien , c'est la doc php.net ca ...

    Notre prof était arreté pendant 2 mois et on a eut des cours par slide enligne.. et ca en fait partie mais , je capte pas du tout...

    Pour la fonction rewind() c'est pas plutot utile dans une classe implémentant une interface Iterator?

    Je vois pas le but de cette interface...

  4. #4
    Membre très actif Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Par défaut
    L'exemple de la doc n'est pas très bien foutu car effectivement ça ne change rien. Ca a plus de sens si tu implémentes ce genre de chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function getIterator() {
      return new ArrayIterator($this->internalArray); // passe un array membre
    }
    Implémenter IteratorAggregate permet de ne pas implémenter toute l'interface de Iterator (et donc déléguer le boulot).
    Par défaut une itération sur un objet va parcourir tous ses membres publiques.
    Les interfaces Iterator et IteratorAggregate permettent de raffiner cette caractéristique. Souvent on se retrouve à itérer sur un array interne à la classe qui n'a pas forcément de visibilité publique.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    Merci megatoto , en effet c'est nettement plus clair.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] interconnexion des classes quel interet?
    Par Agriesean dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2013, 17h27
  2. Developper du libre, quel interet ?
    Par keaton7 dans le forum Débats sur le développement - Le Best Of
    Réponses: 354
    Dernier message: 07/09/2009, 19h06
  3. [GD] Redimmensionnement d'images par multiples de 8, dans quel interet ?
    Par keaton7 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 28/06/2009, 11h53
  4. [Normalisation] Passer de ternaire a binaire et quel interet ?
    Par chateau_dur dans le forum Schéma
    Réponses: 2
    Dernier message: 17/10/2005, 23h57

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