OOP (korzystne wykorzystanie)

za moje pytaniejak korzystać z OOP w korzystny sposób Jako przykład zakładam KOSZYK, do którego jego właściciel (Tom) mający określony ADRES (NY) może dodać ARTYKUŁY (Rower, Samochód). W końcu drukowany jest BILL zawierający wszystkie te informacje.

Moim problemem jest: jak poradzić sobie z gromadzeniem pożądanych informacji (tutaj: właściciel, miasto, ilość przedmiotów) z kilku obiektów? Ponieważ myślę, że głupotą jest robić to ręcznie, jak to zrobiono poniżej (patrz 4.), prawda? (nawet więcej, ponieważ ilość informacji wzrasta w rzeczywistości)

Więc jaki jest „czysty sposób” na tworzenie rachunku / gromadzenie informacji potrzebnych w tym przykładzie?

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

questionAnswers(3)

yourAnswerToTheQuestion