question basique sur le modèle objet

question basique sur le modèle objet - PHP - Programmation

Marsh Posté le 28-01-2009 à 18:36:59    

Bonjour,
admettons que je definisse une classe parent "animal" et des classes enfants, "chien", "chat", etc. ce qui permet de specifier des méthodes selon le type de l'animal

 
Citation :

class Animal{
...
}

 

class Chien extends Animal{
function emetUnSon(){
 return 'ouaf';
}
}

 

class Chat extends Animal{
function emetUnSon(){
 return 'miaou';
}
}

 

Supposons que l'on a une base de données avec les informations d'animaux stockés dans une base de données :

 

NOM TYPE
medor chien
César chat

 

Cette base est consulté par les constructeurs pour instancié un objet.

 

Comment il faut faire le constructeur pour que l'on puisse faire :

 

$animal = new Animal('medor'); // on ne sait pas apriori de quel type est medor
$animal->emetUnSon(); // ouaf


Message édité par Profil supprimé le 28-01-2009 à 18:39:20
Reply

Marsh Posté le 28-01-2009 à 18:36:59   

Reply

Marsh Posté le 28-01-2009 à 18:41:24    

je ferai un animalFactory qui se charge de regarder en base le type , puis d'instancier la bonne classe


---------------

Reply

Marsh Posté le 29-01-2009 à 18:16:28    

En effet j'y ait pensé.
Mais de ce que j'ai compris, il ne faudra pas faire :

 

$animal = new Animal('medor');

 

mais :

 

$animal = Animal::unemethode('medor');

 

Ce qui est gênant, car on a deja du code qui fait des appels en utilisant new, le code étant cracra (tout dans une seule classe avec du if then else). On aurait aimé recodé la classe plus proprement en plusieurs classes avec des liens d'heritage, mais que nos instanciations ne changent pas.


Message édité par Profil supprimé le 29-01-2009 à 18:17:43
Reply

Marsh Posté le 29-01-2009 à 18:55:57    

Pourquoi ne pas faire ?

$animal = new Chien('medor');

Reply

Marsh Posté le 29-01-2009 à 19:37:47    

Code :
  1. $factory = new animalFactory();
  2. $animal = $factory-> createAnimal('medor');
  3.  
  4. class animalFactory{
  5. function createAnimal($nom)
  6. {
  7. $query ="select type from table wher nom ='$nom'";
  8. $result = musql_query($query);
  9. list($type) = mysql_fetch_array($result);
  10. switch($type)
  11. {
  12. case'chien' :
  13.    return new chien($nom);
  14. case 'chat '
  15.     return new chat($nom);
  16.  
  17. }
  18.  
  19. }
  20. }
 


Message édité par flo850 le 29-01-2009 à 19:38:09

---------------

Reply

Marsh Posté le 29-01-2009 à 22:03:52    

billgatesanonym a écrit :

Pourquoi ne pas faire ?

$animal = new Chien('medor');



 
Parce j'aurais aimé ne pas avoir à changer les scripts ou on instancie les objets (ils existent deja), mais juste les classes.
Malheuresement ce n'est pas possible, je vais faire comme le propose flo. Merci!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed