私は3つの項目があるとしましょう:キーボード、Tシャツ、コーラのボトル。いつ子どものクラスをインスタンス化する必要がありますか?
$keyboard = new Item("Keyboard");
echo $keyboard->getPrice(); // return 50;
$tshirt = new Item("Tshirt");
echo $tshirt->getPrice(); // return 20;
$cola = new Item("Cola");
echo $cola->getPrice(); // return 0 or 2 whether the bottle is empty or not.
コーラの瓶のPrice
を取得するためのベストプラクティスは何ですか?
私は2クラスに作成することによって開始:
Class Item {
$this->price;
function __construct($name) {
// ...
}
public function getPrice() {
return $this->price;
}
}
Class Bottle extends Item {
$this->empty;
function __construct($name) {
// get from database the value of $this->empty
}
public function getPrice() {
if($this->empty)
return 0;
else
return $this->price;
}
}
をしかし、今、私は思ったんだけど。私が使用している場合:$cola = new Item("Cola");
、私はItem
オブジェクトではなく、Bottle
オブジェクトではないことをインスタンス化しています。なぜなら、 "普通"のアイテムまたはボトルであるかどうかはまだ分かりません。
ボトルオブジェクトをインスタンス化し、アプリケーションの別のロジックを調べるべきですか?または、アイテムオブジェクトを「再作成」してボトルとして変換する方法はありますか?
工場向け+1ですが、リンクがダウンしています:http://www.dofactory.com/Patterns/PatternAbstract.aspx –