Получить данные из состава объекта - PullRequest
0 голосов
/ 09 ноября 2011

Допустим, у меня есть 3 объекта: "Место", "Человек", "Действие".

В зависимости от того, где находится человек и его возраста, этот человек может выполнять различные действия.

Например:

$place->person->action->drive(); // OK if place is "parking" and "person" is 18+
$place->person->action->learn(); // OK if the place is "school" and person is less than 18.

Как получить доступ к данным об объектах "Человек" и "Место" из класса Action?

Примеры классов:

class Place {
    public $person;
    private $name;

    function __construct($place, $person) {
        $this->name = $place;
        $this->person = $person;
    }

}

class Person {
    public $action;
    private $name;
    private $age;

    function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
        $this->action = new Action();
    }
}

class Action {
    public function drive() {
        // How can I access the person's Age ?
        // How can I acess the place Name ?
    }

    public function learn() {
        // ... Same problem.
    }
}

Я думаю, что мог бы передать "$ this" от Person to Action, когда я создаю объект действия (т. Е. $ This-> action = new Action ($ this)), но как насчет данных Place?

1 Ответ

0 голосов
/ 09 ноября 2011

Нет смысла делать Person свойством Place, а Action - свойством Person.

Я был бы более склонен создавать публичные getter для свойств Person и Placeи либо сделайте их инъекционными свойствами Action, либо, по крайней мере, передайте их в качестве аргументов методам Action, например,

class Place
{
    private $name;

    public function __construct($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

class Person
{
    private $name;
    private $age;

    public function __construct($name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }

    public function getName()
    {
        return $this->name;
    }

    public function getAge()
    {
        return $this->age();
    }
}

class Action
{
    private $person;
    private $place;

    public function __constuct(Person $person, Place $place)
    {
        $this->person = $person;
        $this->place = $place;
    }

    public function drive()
    {
        if ($this->person->getAge() < 18) {
            throw new Exception('Too young to drive!');
        }

        if ($this->place->getName() != 'parking') {
            throw new Exception("Not parking, can't drive!");
        }

        // start driving
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...