Let’s say I have 3 objects : “Place”, “Person”, “Action”.
Depending on the place where is the person and the age of this person, this person can do different action.
For example :
$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.
How can I access the data about the objects “Person” and “Place” from the Action class ?
Classes examples :
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.
}
}
I think I could transmit “$this” from Person to Action when I create the Action Object (ie. $this->action = new Action($this)), but what about the Place data ?
It doesn’t make sense to make Person a property of Place nor Action a property of Person.
I’d be more inclined to create public getters for Person and Place’s properties and either make them injectable properties of Action or at least pass them as arguments to Action’s methods, eg