2009-06-03 13 views
0

多型になると私はまだ初心者です。OOデザイン:親クラスから子クラスを返す

私のデータベースには犬、猫、そしてマウスのテーブルがあります。動物のクラスのようなものであることを

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

:私のような何かを呼び出すことができるようにしたい

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; 
    } 
} 

これは動作しませんが、私は新しい動物を呼び出すことができるようにしたいとパス特定の動物に戻してもらう。どのように私はこれを設計できますか? (私はPHPを使用しています)。

答えて

5

を検索してみてください。あなたはここでそれをよく読んですることができます

Factory Pattern

そして、PHPのためのいくつかの長い記事:

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

+0

はい!これはまさにそれです。私は "Design Patterns in PHP"が最も有用であることを発見しました。他のPHPの記事は、同時に抽象化について話していたので、少し混乱しました。 –

0

私はPHPを知らないが、それはあなたが

パターンの説明については、「4工場のギャング」をもう一度検索してください

工場

と呼ばれ話しているデザインパターンを場合に役立ちます。

そして、実際にファクトリパターンと呼ばれるデザインパターンであるあなたが探しているものを「PHPのファクトリパターンの実装」

2

をあなたが望む "ファクトリパターン" です。新しいAnimalを直接作成するのではなく、作成する動物の種類を選択する関数を呼び出します。 Javaでは、おそらくクラスの静的メソッドを作成し、PythonではすべてのAnimalクラスをキーにリンクされたディクショナリに格納するので、キーを検索して引数をコンストラクタに渡すことができます。

PHPの場合は、Using the Factory Pattern in PHPという記事があります。

関連する問題