php对象设计父-子对象
我想在php中使用父/子类,但不是子类。例如,假设我们有一个班级的房子,一个有门有窗的房子php对象设计父-子对象,php,class,oop,extends,Php,Class,Oop,Extends,我想在php中使用父/子类,但不是子类。例如,假设我们有一个班级的房子,一个有门有窗的房子 class House { } class Door { } class Window { } 我们有两种门,比如车库门和前门 class GarageDoor extends Door { } class FrontDoor extends Door { } 如何创建房屋和门以及房屋和窗户之间的关系,以便在创建门时,必须至少有一个房屋,并且我应该知道具体的房屋。当我删除一栋房子时,它的
class House {
}
class Door {
}
class Window {
}
我们有两种门,比如车库门和前门
class GarageDoor extends Door {
}
class FrontDoor extends Door {
}
如何创建房屋和门以及房屋和窗户之间的关系,以便在创建门时,必须至少有一个房屋,并且我应该知道具体的房屋。当我删除一栋房子时,它的门窗也应该被删除。我怎样才能做到这一点呢?不是说这是最好的,甚至是一个很好的方法,但它应该给你一些可以玩的东西,让你自己尝试不同的东西:)
工厂模式将有助于以正确的方式管理对象的创建,并使用依赖项注入。观察者模式可以让您监听要解构的对象并执行操作。门是房屋中的一个组件,因此您可能希望房屋中的类属性用于门对象(如果有多个门,则需要门对象数组)。同样,也可以提到门上的房子,尽管这可能会导致耦合,我认为在这种情况下这并不重要。谢谢。这很有帮助。我只是换了房子的构造,因为我不喜欢没有门的房子。因此,在房屋的构造中,我添加了$this->doors[]=new FrontDoor($this)。在这种情况下,您还可以使房屋构造需要一个前门:
公共功能uu构造(FrontDoor$FrontDoor)
,这样您就可以控制房屋使用的前门,因为如果不给它一个前门,你就不能创建一个新房子:)尽管这会让你在我写的例子中遇到问题,因为你不能创建一个没有房子的门,也不能创建一个没有门的房子;)因此,这就是我们应该考虑的方向
class House
{
/**
* An array of all doors that have been installed in the house.
*/
private $doors = [];
/**
* You can install a door in a house.
*/
public function installDoor(Door $door)
{
$this->doors[] = $door;
}
}
class Door
{
/**
* A reference to the house this door is installed in.
*/
private $house = null;
/**
* A house is required before a door can be created.
*/
public function __construct(House $house)
{
$house->installDoor($this);
$this->house = $house;
}
}
$house = new House();
$door = new Door($house);