2009-06-03 5 views
0

Je suis encore un novice quand il s'agit de polymorphisme, donc j'espère pouvoir formuler ma question correctement.OO Design: Renvoyer une classe enfant d'un parent

Disons que j'ai des tables dans ma base de données - chien, chat et souris. Je veux être en mesure d'appeler quelque chose comme:

$animal = new Animal("dog", 12); 

avec la classe des animaux étant quelque chose comme:

class Animal { 
    protected $id; 
    protected $legs; 
    protected $height; 
    function __construct($type, $id) { 
    if ($type == "dog") { 
     return new Dog($id); 
    } 
    } 
} 

class Dog extends Animal { 
    function __construct($id) { 
    $this->id = $id; 
    $this->legs = 4; 
    $this->height = 1; 
    } 
} 

Cela ne fonctionne pas, mais je veux être en mesure d'appeler un nouvel animal et laissez-passer dans l'animal spécifique et doit être retourné. Comment puis-je concevoir cela? (J'utilise PHP).

Répondre

5

Qu'est-ce que vous cherchez est en fait un modèle de conception appelé le modèle d'usine. Vous pouvez lire sur le sujet ici:

Factory Pattern

Et quelques articles plus longs pour PHP:

Design Patterns in PHP
The Basics of Using Factory Pattern in PHP

+0

Oui! C'est exactement ça. J'ai trouvé les "Design Patterns en PHP" les plus utiles. L'autre article de PHP était un peu déroutant pour moi car il parlait de l'abstraction en même temps. –

0

Je ne sais pas php mais si elle aide le modèle de conception que vous parlez est appelé

usine

Essayez « gang de quatre Factory » pour une explication du motif.

Puis, essayez la recherche de « modèle usine php implémentation »

2

Ce que vous voulez est un "modèle d'usine". Plutôt que de créer directement un nouveau Animal, appelez une fonction qui choisit le type d'animal à créer. En Java je ferais probablement une méthode statique de la classe, et en Python je stockerais toutes les classes animales dans un dictionnaire lié à la clé, donc je pourrais chercher la clé et ensuite passer les arguments au constructeur . J'ai trouvé un article sur le Using the Factory Pattern in PHP pour PHP.

Questions connexes