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] Collection Php5 incompréhension :'(


Sujet :

Langage PHP

  1. #21
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    La je ne voit pas pourquoi :O PHP5 supporte très bien cela.
    Oui tu as raison ; ). En fait, ça lève un warning de "strict standard", mais ne provoque pas d'erreur.

  2. #22
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Oo sur quel version de PHP ?? Sa m'inquiete, c'est le genre de truc que j'utilise partout...

  3. #23
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Je test avec la 5.2.1

  4. #24
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Ah oui tu as raison.... php

  5. #25
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    bon j'ai repris tout ca et maintenant ca ressemble à ca :
    je vous copie / colle mes classes !

    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
    21
    22
    23
    24
    25
    26
     
    class CollectionCategorie implements  IteratorAggregate {
    	private $items = array();
      	private $count = 0;
     
    	public function __construct($bdh) {
    		$sql = "SELECT idCat, nomCat, description FROM categories ORDER BY idCat;";
    		$sth = $bdh->query($sql);
    		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
    		foreach ( $result as $c ) {
    		    $cat = new Categorie($bdh);
    		    $cat->setId($c['idCat']);
    		    $cat->setNomCat($c['nomCat']);
    			$cat->setDescription($c['description']);
    		    $this->items[] = $cat;
    		    }
    	}
     
    	public function getIterator() {
       		return new MyIterator($this->items);
      	}
     
      	public function add($value) {
       		$this->items[$this->count++] = $value;
      	}
    }
    Ma classe myIterator :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    class MyIterator implements Iterator
    {
    	private $var = array();
     
      	public function __construct($array){
       		if (is_array($array) )
         		$this->var = $array;
      	}
     
      	public function rewind() {
       		reset($this->var);
     	}
     
      	public function current() {
       		$var = current($this->var);
       		return $var;
      	}
     
      	public function key() {
       		$var = key($this->var);
       		return $var;
      	}
     
      	public function next() {
       		$var = next($this->var);
       		return $var;
      	}
     
      	public function valid() {
       		$var = $this->current() !== false;
       		return $var;
      	}
    }
    et la classe catégories :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class Categorie {
    	private $idCat;
    	private $nomCat;
    	private $description;
     
    	function __construct($dbh){
    		$this->dbh = $dbh;
    		$this->description = '';
    		$this->nomCat = '';
    		$this->idCat = 0;
    	}
     
    	function __tostring(){
    		return "Nom : $nomCat";
    	}
     
    	function getId(){
    		return $this->idCat;
    	}
     
    	function getNomCat(){
    		return $this->nomCat;
    	}
     
    	function getDescription(){
    		return $this->description;
    	}
     
    	function setId($id){
    		$this->idCat = $id;
    	}
     
    	function setNomCat($nomC){
    		$this->nomCat = $nomC;
    	}
     
    	function setDescription($des){
    		$this->description = $des;
    	}
    malheureusement quand je fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    	include_once('conf/conf.inc.php');
    	include_once('fonctions.php');
     
    	$collect = new CollectionCategorie($dbh);
    	foreach ($collect as $key => $val) {
       		echo $key -> $val;
    	}
     
    ?>
    ca ne marche pas !!
    Il m'affiche 2 fois "Nom : " ce qui prouve qu'il crée bien deux catégories mais c'est tout !
    J'ai fait un echo dans la classe Myiterator j'arrive à voir les identifiants mais c'est tout ...
    Ca me parait très complexe tout ca pourriez vous m'aider ? Merci d'avance

  6. #26
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Dans ce code, $key est un index (index de l'array passé à l'itérateur).

    Ca donne quoi si tu essais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $collect = new CollectionCategorie($dbh);
    foreach ($collect as $cat) {
      echo $cat->getNomCat();
    }

  7. #27
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    hum ca a marché direct :p
    merci bien !
    Mais alors dans ce cas à quoi me sert ma méthode __tostring ? si l'itérateur peut pas lire directement un objet ?

  8. #28
    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
    C'est parce que ta méthode toString est erronée : tu dois utiliser $this->nomCat au lieu de $nomCat !

  9. #29
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    __toString() est une méthode "magic" qui laisse la possibilité à l'utilisateur de définir comment l'objet doit être affiché si celui-ci est converti en string. C'est le cas si tu fais:

    echo $cat;

    Dans l'exemple que j'ai posté.

  10. #30
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    voilà j'ai modifié et mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach ($collect as $cat) {
      		echo $cat.'<br/>';
    	}
    ca marche au poil !

  11. #31
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    Ptite question subsidiaire :
    Pensez vous qu'il est plus logique de dire que la catégorie est directement une collection d'article ? ou alors de faire une classe collection d'articles ?

  12. #32
    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
    dur dilemne qui dépend fortement du reste de l'application !
    De manière simple je pars du principe que moins il y a de classe, mieux je me porte donc j'aurais tendance à dire dans un premier temps qu'une categorie est capable de gérer des articles, néanmoins ca peut evoluer dans le temps et le jours où ca devient le boxon, un petit refactoring et hop naissance d'une nouvelle classe ad-hoc...

  13. #33
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Pensez vous qu'il est plus logique de dire que la catégorie est directement une collection d'article
    A toi de voir...

    J'aurais plutôt tendance à dire qu'une catégorie n'est pas une collection d'articles (toujours dans le cadre de ton problème). C'est une entité à part. On peut imaginer des problèmes où on manipule des catégories sans se soucier des articles.

    Le but final c'est quand même que ton programme fonctionne, et c'est la réalité du terrain qui aura le dernier mot...

  14. #34
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    bon j'ai mis une tite méthode collectionArticles($idCat) dans ma classe catégories
    Mais j'aime pas trop ca parceque la classe catégorie est au courant de ce qu'il y a dans la table articles...
    Bref dur dilemme comme tu disais ...

Discussions similaires

  1. [POO] Classe php5 et constructeur php4
    Par mathrem dans le forum Langage
    Réponses: 1
    Dernier message: 19/03/2007, 17h10
  2. [POO] Demande conseils sur la POO avec php5
    Par tigunn dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2007, 14h44
  3. [POO] Surchage php5 es ce du vrai POO ?
    Par vacknov dans le forum Langage
    Réponses: 7
    Dernier message: 28/07/2006, 17h40
  4. Réponses: 4
    Dernier message: 16/06/2006, 10h49
  5. Réponses: 9
    Dernier message: 16/03/2006, 18h05

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