scorpion-ds
Новичок
Есть такая задача:
Базовый класс:
далее:
далее, идут другие типы свойств.
При это в системе, есть "каталог" и "менеджер пользователей" (это примерно, могут быть разные модули), свойства типа CSPropertiesText и CSPropertiesSelect одинаковые, но другой CSProperties, выглядит примерно так:
здесь, переопределяются функции создания и удаления, все бы ни чего, но!
Когда делается вызов, типа:
$prop = CatProperties::getInstance($id);
то возвращается объект который нам нужен, но вот базовый класс получаем не CatProperties, а CSProperties.
Не могу понять, как мне добиться создания объектов типа CSPropertiesText и т.п., не от CSProperties, а от CatProperties, можно было бы просто скопировать функционал CSPropertiesText в CatPropertiesText и делать у него родителя от CatProperties, но это ведь не решение, так как код там одинаковый будет.
Базовый класс:
PHP:
abstract class CSProperties {
protected $ID;
protected function __construct($id) {
$this->ID = $id;
}
static function getInstance($id) {
//эта функция возвращает объект согласно его типу
modelProperties::$pdo = MAIN_CLASS::cs()->pdo;
if(self::$PropertiesTypes == array())
self::$PropertiesTypes = modelProperties::getTypes();
switch (self::$PropertiesTypes[$id]) {
case 'text' : {
return new CSPropertiesText($id);
}break;
case 'textarea' : {
return new CSPropertiesTextarea($id);
}break;
case 'tinymce' : {
return new CSPropertiesTinymce($id);
}break;
case 'select' : {
return new CSPropertiesSelect($id);
}break;
case 'file' : {
return new CSPropertiesFiles($id);
}break;
case 'image' : {
return new CSPropertiesImage($id);
}break;
case 'images' : {
return new CSPropertiesImages($id);
}break;
}
}
//общий функионал
}
PHP:
class CSPropertiesText extends CSProperties {
public function __construct($id) {
parent::__construct ($id);
}
//функционал для текстового поля
}
class CSPropertiesSelect extends CSProperties {
public function __construct($id) {
parent::__construct ($id);
}
//функционал для select поля
}
При это в системе, есть "каталог" и "менеджер пользователей" (это примерно, могут быть разные модули), свойства типа CSPropertiesText и CSPropertiesSelect одинаковые, но другой CSProperties, выглядит примерно так:
PHP:
abstract class CatProperties extends CSProperties {
protected function __construct($id) {
parent::__construct($id);
}
static function create($name, $title, $typeData, $typeDisplay, $refID) {
//***
}
public function delete() {
//***
}
}
Когда делается вызов, типа:
$prop = CatProperties::getInstance($id);
то возвращается объект который нам нужен, но вот базовый класс получаем не CatProperties, а CSProperties.
Не могу понять, как мне добиться создания объектов типа CSPropertiesText и т.п., не от CSProperties, а от CatProperties, можно было бы просто скопировать функционал CSPropertiesText в CatPropertiesText и делать у него родителя от CatProperties, но это ведь не решение, так как код там одинаковый будет.