PHP OO - 如何在X之间建立类关系有很多Y.

时间:2014-12-04 18:54:42

标签: php class relationship

所以我有两个课:让我们称之为人和车

在我可以实例化之前,我需要从我的Car类中的person对象访问一些属性。

我只是简单地说一下:$car = new Car($person);
 如果是,那么如何在我的Car类中访问这些对象属性?它会是这样的:

class Car{

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

}

如果不是,那么实现这一目标的方法是什么?

2 个答案:

答案 0 :(得分:1)

我们在这里有些困惑。现实世界的OOP,考虑并比较:

汽车 人员购买

$person->addCar($car);

正在进入 汽车(坐在左前排座位上):

$car->addPerson($person, Car::SEAT_FRONT_LEFT);

其中Car::SEAT_FRONT_LEFTpublic 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();
    }
}