抽象类,然后使用数据库中的属性创建继承此对象的对象

时间:2011-11-17 19:35:31

标签: php database class inheritance abstract-class

我目前正在考虑创建一个抽象类Building。然后,我希望使用多个不同类型的Building来使用数据库中的属性继承此摘要。

继承我通常会有:

abstract class Building {
    protected
        $id,
        $name,
        $cost;

    public function getName() { // return name }

}
class CoffeeShop inherits Building {
    protected $id = 2, $name = 'Coffee Shop', $cost = '£15';
    public function sellCoffee() { // sell it }
}
class ConferenceCentre inherits Building {
    protected $id = 2, $name = 'Conference Centre', $cost = '£10';
    public function bookRoom() { // book it } 
}

非常标准,一个标准蓝图构建类,定义其他人应该继承和声明的内容。 假设有over 100 different building types ...其中一些是非常标准的,但它们的所有属性都在database中定义,允许管理员进入并更改它name, costs, requirements等等其中可能不需要定义任何特殊功能,但如果将来需要定义该功能将会很酷。

是否可以进入数据库并使用其属性和类型填充/创建对象,而无需先定义实际文件?如果我要实际创建文件,那么它是手动工作,我绑定到文件系统而不是存储在数据库中的实际建筑物。

然后我可以做类似的事情:

abstract class Building { // blah }

// Loop through DB to create objects that inherit the building class (factory?)
$building = new BuildingFactory('CoffeeShop');

// Random function that hints of the type (despite class file not existing)
public function (CoffeeShop $cs) { // Do stuff }

// Random test of type
if (gettype($building) == 'CoffeeShop') { // Do stuff }

我想问题是......有没有办法在不创建实际文件的情况下创建类。我想能够检查该文件是否确实存在,并在需要时添加自定义函数。

否则我必须创建100多个文件并让工厂将它们拉起并填入。

谢谢,Dominic

1 个答案:

答案 0 :(得分:3)

如果不编写定义,则无法定义类。任何计算机语言都是如此,对PHP来说也是如此。

您可以将代码放入数据库中,也可以根据从数据库中提取的数据生成代码。

但是,当你接近eval(这将用于那些)时,如果你在创建设计时提出正确的问题,通常会更有价值。

我觉得你总是拥有相同的对象,但它只有一些不同的数据。

而且我不确定这些对象必须具有多少不同的功能。您还没有分享有关应用程序的一般结构和基础域逻辑的大量信息,因此在第一个答案中很难说清楚。