begin process at 2012 05 31 17:21:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Autre

 > 

[SPL] Une variable objet comme clé de l'interface Iterator


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[SPL] Une variable objet comme clé de l'interface Iterator

mercredi 21 novembre 2007 à 01:31:04 | [SPL] Une variable objet comme clé de l'interface Iterator

LocalStone

Salut à tous,
Alors voilà ma question : est-il possible d'utiliser l'interface Iterator (ou tout interface qui permettent le parcours d'un objet avec un foreach) de telle manière à ce que la clé retournée soit un objet. Imaginons par exemple un objet de type Map, à la manière de Java : on fait foreach($objMaMap as $objMaCleObjet => $mxdMaVariable) ... Parce qu'après avoir essayé, j'ai eu une erreur qui me dit que le type de retour n'est pas convenable ...
Merci pour vos réponses !

LocalStone
mercredi 21 novembre 2007 à 02:26:32 | Re : [SPL] Une variable objet comme clé de l'interface Iterator

neigedhiver

Salut, Quand on fait : foreach ($objMaMap as $objMaCleObjet => $mxdMaVariable) $objMaMap est l'itérateur, $objMaCleObjet est ce que retourne la méthode key() de l'itérateur, et $mxdMaVariable ce que retourne current() key() doit, en toute logique, retourner un scalaire (le plus souvent un entier ou une chaine de caractères). current() par contre peut retourner n'importe quel type de variable. J'ai par exemple un itérateur pour gérer mes fichiers de configuration. J'ai deux niveau : la racine (la configuration générale) et des modules. Quand j'itère sur mon itérateur config, il me renvoit des objets configModule. "Parce qu'après avoir essayé, j'ai eu une erreur qui me dit que le type de retour n'est pas convenable ..." Que disait précisément le message d'erreur ?
mercredi 21 novembre 2007 à 17:10:52 | Re : [SPL] Une variable objet comme clé de l'interface Iterator

LocalStone

Alors de tête, comme ça en speed, c'était Illegal Type Returned From MaMap::key() ... Je crois que c'est ça.
Je vais essayer de poster le script qui pose problème le plus vite possible, mais d'ici là ... Si quelqu'un à une idée quand même ...

LocalStone
mercredi 21 novembre 2007 à 17:32:46 | Re : [SPL] Une variable objet comme clé de l'interface Iterator

neigedhiver

Ah oui ok... Bon la doc PHP de la fonction ley() n'est pas très très explicite, pas plus que la doc de la SPL... Pas facile de savoir quel type de variable elle doit retourner. J'ai tendance à penser qu'il faut que ce soit un certain scalaire (typiquement int ou string, mais peut-être que float est autorisé). Après tout, c'est un index, et utiliser un objet ou un tableau comme index n'a pas de sens. Par contre, current() peut retourner n'importe quel type de variable : scalaire ou non, objet, array, etc. Aucune limitation à ce niveau là.
mercredi 21 novembre 2007 à 19:59:51 | Re : [SPL] Une variable objet comme clé de l'interface Iterator

malalam

Administrateur CodeS-SourceS
Hello,

non c'est impossible. Je ne comprends même pas comment tu as pu te débrouiller pour en arriver là, parce qu'à la déclaration de ton objet itérateur, ça devrait planter. Exemple :
<?php
$oV = new ArrayIterator(array(1,2,3));
$oK = new ArrayIterator (array(4,5,6));
$oTest = new ArrayIterator(array (
    $oK => $oV)
);
foreach($oTest as $oK => $oV) {
    echo $oK;
}
?>
Ca ne plante pas sur le foreach(), mais sur la déclaration de $oTest.
Ensuite je vois mal l'intérêt ?
Imaginons que $o est un objet étendant ArrayIterator et possèdant une méthode lambda? Et que mon objet test soit un ArrayObject dans lequel on stocke des $o. Je pêux alors faire :
foreach($test as $o) {
  $o->lambda();
}
mercredi 21 novembre 2007 à 23:35:40 | Re : [SPL] Une variable objet comme clé de l'interface Iterator

LocalStone

Bah en fait, j'ai une classe Map qui implémente l'interface Iterator, donc c'est normal que l'interpréteur ne mais rien dit avant l'execution.
Euh ... Du coup, vous avez pas une solution élégante pour palier à ce manque ? Le propre d'une map est de pouvoir utiliser des clefs de n'importe quelle type, et je ne vois pas pourquoi on pourrait pas la traverser.
En fait, l'idéal serait de définir une class MapEntry qui possède 2 méthode : getKey() et getValue(). Et en fait, on fasse quelque chose du genre :
foreach($objMap as $objMapEntry) {
    $mxdValue = $objMapEntry -> getValue();
    $mxdKey = $objMapEntry -> getKey();
}
Mais y a t-il une interface qui permette le parcours d'objet à la manière de Iterator, sans devoir implémenter la méthode key() ?

LocalStone
jeudi 22 novembre 2007 à 11:15:22 | Re : [SPL] Une variable objet comme clé de l'interface Iterator

malalam

Administrateur CodeS-SourceS
Non, key() est nécessaire. Elle fait partie de l'interface de base : Iterator.
Mais tu as effectivement ArrayObject qui permet le parcours d'un objet.


Cette discussion est classée dans : objet, clé, interface, iterator, spl


Répondre à ce message

Sujets en rapport avec ce message

Interface Iterator et problème de conception. [ par LocalStone ] Salut à tous, Alors voilà ... Un nouveau post, un nouveau problème ! Mais par contre, on continue avec l'interface Iterator.Pour un projet, j'ai du c Interface et __toString() [ par syndrael ] Savez vous s'il est possible d'utiliser __toString() dans une classe qui utilise une interface ?Mon problème est que j'obtiens suite à mon __toString( Aiguillage BDD avec stockage de fichiers [ par ju51 ] Salut, je suis complètement débutant, mais prêt à m'investir pourvu que je parte dans la bonne direction que j'espère vous m'indiquerez! Je souhaite Formulaire et envoi de mail [ par Becca ] Bonjour, j'ai un petit problème avec le formulaire. En fait quand les personnes remplissent le formulaire je voudrais recevoir par mail leur réponse. php-linux [ par salah555 ] je suis entrent de développer une  application en php qui travaille sur une Platform linux fedora, <p class="MsoNorma recherche inerne par mots clé [ par jeuxfree ] bonjour je suis novice et je cherche a installer un moteur de recherche interne car je propose des jaquettes et j'aimerais que les internautes les tro Formulaire et envoi de mail [ par Becca ] Bonjour,J'ai fait un formulaire qu'une fois remplit ça m'envoie un mail (fonction mail()). Il y a le champ nom, objet, adresse et message.Je reçois bi orienté objet en php [ par am1ra2 ] bonjour,    j'ai des connaissances sur la POO en php mais je ne connais pas comment implimenter la POO dans mes applications. formulaire objet [ par jasou62114 ] bonjour à tous, j'ai un soucis, je n'arrive pas à faire une liste déroulante en php objet. J'ai repris un projet qui as déjà été codé à 99% et je l'a Problème à la création d'un objet [ par BooletMan ] Bonjour bonjour ! A partir d'un XML, je récupère sous forme d'objet les informations concernant un fichier (son nom, si ce fichier est requis, s'il f


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,310 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales