所以我有两个课:让我们称之为人和车
在我可以实例化之前,我需要从我的Car类中的person对象访问一些属性。
我只是简单地说一下:$car = new Car($person);
如果是,那么如何在我的Car类中访问这些对象属性?它会是这样的:
class Car{
function __construct($person)
{
$this->person = $person;
}
}
如果不是,那么实现这一目标的方法是什么?
答案 0 :(得分:1)
我们在这里有些困惑。现实世界的OOP,考虑并比较:
汽车 由人员购买
正在进入 汽车(坐在左前排座位上): 其中 关系很重要,要保持语义正确,才能构建工作对象。 - 要实现这一点,查找( 我可能定义的示例类:$person->addCar($car);
$car->addPerson($person, Car::SEAT_FRONT_LEFT);
Car::SEAT_FRONT_LEFT
是public const
的{{1}}成员。Car
- )Aware
的含义可能会有所帮助。Interface
答案 1 :(得分:0)
如果我们想从封装方面看到它,我们需要考虑它。如果汽车知道一个人在里面,这没关系吗?也许我们需要一个服务/控制器来接受这个参数?
function processSomething(Person $person, Car $car) {}
但你的榜样一点都不差。它取决于用例。它的工作方式,如果一辆车可能知道他的人。
如果你可以有多个人,你可以拥有这个构造函数:
public function __construct(array $personList) {
//Check for a person
if (count($personList) < 1) {
throw new Exception('No person given');
}
//Validate list
foreach ($personList as $person) {
if (!$person instanceof Person) {
throw new Exception('This is not a person');
}
}
//Keep persons
$this->personList = $personList;
}
另请注意,如果我们想在我们的类中有多个对象,我们可以创建一个ContainerObject:
class ContainerObject {
public $person;
public $moreInfo;
public $manyMoreInfo;
}
class Person {
public function sayHello() {};
}
class Car {
private $containerObj;
function __construct(ContainerObject $obj) {
$this->containerObj= $obj;
}
function foo() {
$this->containerObj->person->sayHello();
}
}