有益な方法で OOP を使用する方法に関する私の質問では、特定のアドレス (NY) を持つ所有者 (Tom) が ARTICLES (自転車、車) を追加できる BASKET を例として想定します。最後に、これらすべての情報を含む請求書が印刷されます。
私の問題は次のとおりです:複数のオブジェクトから必要な情報(ここでは所有者、都市、アイテムの量)を収集する方法は? 以下のように手動で行うのはばかげていると思うので(4.を参照)、そうではありませんか?(現実は情報量が増えるのでなおさら)
では、請求書を作成したり、この例で必要な情報を収集したりするための「クリーンな方法」は何ですか?
<?php
$a = new basket('Tom','NY');
$a->add_item("Bike",1.99);
$a->add_item("Car",2.99);
$b = new bill( $a );
$b->do_print();
1.
class basket {
private $owner = "";
private $addr = "";
private $articles = array();
function basket( $name, $city ) {
// Constructor
$this->owner = $name;
$this->addr = new addresse( $city );
}
function add_item( $name, $price ) {
$this->articles[] = new article( $name, $price );
}
function item_count() {
return count($this->articles);
}
function get_owner() {
return $this->owner;
}
function get_addr() {
return $this->addr;
}
}
2.
class addresse {
private $city;
function addresse( $city ) {
// Constructor
$this->city = $city;
}
function get_city() {
return $this->city;
}
}
3.
class article {
private $name = "";
private $price = "";
function article( $n, $p ) {
// Constructor
$this->name = $n;
$this->price = $p;
}
}
4.
class bill {
private $recipient = "";
private $city = "";
private $amount = "";
function bill( $basket_object ) {
$this->recipient = $basket_object->get_owner();
$this->city = $basket_object->get_addr()->get_city();
$this->amount = $basket_object->item_count();
}
function do_print () {
echo "Bill for " . $this->recipient . " living in " . $this->city . " for a total of " . $this->amount . " Items.";
}
}