Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1376 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  question basique sur le modèle objet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

question basique sur le modèle objet

n°1844384
Profil sup​primé
Posté le 28-01-2009 à 18:36:59  answer
 

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
mood
Publicité
Posté le 28-01-2009 à 18:36:59  profilanswer
 

n°1844386
flo850
moi je
Posté le 28-01-2009 à 18:41:24  profilanswer
 

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


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

n°1844927
Profil sup​primé
Posté le 29-01-2009 à 18:16:28  answer
 

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
n°1844942
billgatesa​nonym
Posté le 29-01-2009 à 18:55:57  profilanswer
 

Pourquoi ne pas faire ?

$animal = new Chien('medor');

n°1844959
flo850
moi je
Posté le 29-01-2009 à 19:37:47  profilanswer
 

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

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

n°1845000
Profil sup​primé
Posté le 29-01-2009 à 22:03:52  answer
 

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!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  question basique sur le modèle objet

 

Sujets relatifs
[JS] Question basique de fonctions...Question débutant sur errorlevel
Petite question à propos de FlashPetite question sur un on release
Question de baseQuestion sur les variables
question reseauRécuperation d'un objet dans un JList
Erreur dans un programme basique en C 
Plus de sujets relatifs à : question basique sur le modèle objet


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR