Classe collection et requete SQL
Posté : 30 nov. 2008, 18:06
Bonjour,
Cette question me vient par suite à : http://www.phpfrance.com/forums/voir_sujet-242638.php
Désolé comme personne ne l'a fait remonté et que je ne peut plus y répondre, je suis obligé de faire un nouveau topic...
Je voudrais revenir sur l'exemple de sadeq concernant la classe collection d'objets, qui m'a beaucoup aidé au passage
On y voit que dans le constructeur on fait le remplissage de la liste par le biais d'une requête SQL
- Avantage : Une modification de la table n'obligerait juste à modifier la requête à l'intérieure de l'objet collection
- Inconvénient : La classe collection ne peut pas être générique, on ne peut l'utiliser qu'avec l'objet page. Oblige donc à faire plusieurs classe de collection d'objets similaires.
Ma question est donc la suivante
Ne pourrait-on pas avoir une classe collection générique de ce style là ( mon exemple n'est pas terminé ) ?
- Avantage : La classe membre est générique et peut être utilisé avec d'autres objets que l'objet membre
- Inconvénient : Une modif de la structure de la table obligerait à reprendre toutes les requêtes puisque celle-ci ne sont en dehors de la classe collection
Voilà, si quelqun à un avis sur la meilleur solution... ?
( Et voici la classe membre utilisé dans l'exemple )
Cette question me vient par suite à : http://www.phpfrance.com/forums/voir_sujet-242638.php
Désolé comme personne ne l'a fait remonté et que je ne peut plus y répondre, je suis obligé de faire un nouveau topic...
Je voudrais revenir sur l'exemple de sadeq concernant la classe collection d'objets, qui m'a beaucoup aidé au passage
On y voit que dans le constructeur on fait le remplissage de la liste par le biais d'une requête SQL
public function __construct(){
$sql = "SELECT * FROM zen_pages";
$query = mysql_query($sql) or die( mysql_error() );
while( $page = mysql_fetch_array( $query ) )
{
$page = new page( $page['id_pages'] , $page['nom'] , $page['fichier'] );
$this->liste[] = $page;
}
}
En y réfléchissant, le fait de faire ça à un avantage mais aussi un inconvénient :- Avantage : Une modification de la table n'obligerait juste à modifier la requête à l'intérieure de l'objet collection
- Inconvénient : La classe collection ne peut pas être générique, on ne peut l'utiliser qu'avec l'objet page. Oblige donc à faire plusieurs classe de collection d'objets similaires.
Ma question est donc la suivante
Ne pourrait-on pas avoir une classe collection générique de ce style là ( mon exemple n'est pas terminé ) ?
class Collection{
public $objets;
public function __construct()
{
$this->objets=array();
}
public function add($objet)
{
$this->objets[]=$objet;
}
public function get()
{
return $this->objets;
}
}
Que l'on pourrait utiliser par exemple comme ceci ?// Création des membres : On imagine une boucle sur le résultat d'une requête à la place des valeurs nom et email ici en dur
$membre1 = new membre;
$membre1->setNom('toto');
$membre1->setEmail('[email protected]');
$membre2 = new membre;
$membre2->setNom('lili');
$membre2->setEmail('[email protected]');
// Création de la collection de membres
$collectionMembre = new Collection();
$collectionMembre->add($membre1);
$collectionMembre->add($membre2);
// Obtention de la collection de membres
$collectionMembre->get();
// Liste des membres de la collection
//print_r($collectionMembre);
foreach($collectionMembre->objets as $k=>$membre)
{
echo $membre->nom.'<br />';
}
// Obtention membre
echo $membre1->getNom();
La aussi il y'a donc avantage et inconvénient :- Avantage : La classe membre est générique et peut être utilisé avec d'autres objets que l'objet membre
- Inconvénient : Une modif de la structure de la table obligerait à reprendre toutes les requêtes puisque celle-ci ne sont en dehors de la classe collection
Voilà, si quelqun à un avis sur la meilleur solution... ?
( Et voici la classe membre utilisé dans l'exemple )
class membre
{
public $nom;
public $email;
public function setNom($nom)
{
$this->nom = $nom;
}
public function setEmail($email)
{
$this->email = $email;
}
public function getNom()
{
return $this->nom;
}
}