Абстрактный класс, а затем создание объектов, наследующих это, используя свойства из базы данных. - PullRequest
0 голосов
/ 17 ноября 2011

В настоящее время я смотрю на создание абстрактного класса 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 } 
}

Довольно стандартно, aстандартный класс построения плана, который определяет, что другие должны наследовать и объявлять.Допустим, есть 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 файлов, чтобы фабрика подтянула их и заполнила их.

Спасибо, Доминик

1 Ответ

3 голосов
/ 17 ноября 2011

Вы не можете определить класс без написания определения. Это верно для любого компьютерного языка, и это верно и для PHP.

Вы можете поместить код в базу данных или сгенерировать код на основе данных, которые вы извлекаете из базы данных.

Но всякий раз, когда вы приближаетесь к eval (который будет использоваться для этих целей), чаще всего стоит посмотреть, задаете ли вы правильные вопросы при создании дизайна.

Мне кажется, что у вас все время один и тот же объект, но у него есть только разные данные.

И я не уверен, сколько разных функций должны иметь эти объекты. Вы не поделились большой информацией об общей структуре вашего приложения и базовой доменной логике, поэтому в этом первом ответе трудно сказать.

...