ООП (выгодное использование)

на мой вопрос оhow to use OOP in a beneficial way В качестве примера я предполагаю КОРЗИНУ, к которой ее владелец (Том), имеющий определенный АДРЕС (Нью-Йорк), может добавить СТАТЬИ (Велосипед, Автомобиль). Наконец, БИЛЛ напечатан со всей этой информацией.

Моя проблема: Как справиться со сбором нужной информации (здесь: владелец, город, количество предметов) из нескольких объектов? Потому что я думаю, что глупо делать это вручную, как это сделано ниже (см. 4.), не так ли? (даже больше, поскольку объем информации в реальности увеличивается)

Так что же такое «чистый путь»? для создания счета / сбора информации, необходимой в этом примере?

<code><?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();
</code>

1.

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

}
</code>

2.

<code>class addresse {

    private $city;

    function addresse( $city ) {
        // Constructor
        $this->city = $city;
    }

    function get_city() {
        return $this->city;
    }

}
</code>

3.

<code>class article {

    private $name = "";
    private $price = "";

    function article( $n, $p ) {
        // Constructor
        $this->name = $n;
        $this->price = $p;
    }   

}
</code>

4.

<code>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.";
    }

}
</code>

Ответы на вопрос(3)

Ваш ответ на вопрос