Звучит так, как будто вы хотите использовать Шаблон фабричного дизайна
Сделать библиотеку:
class MyModelFactory {
static public function Factory($data) {
$type = key($data);
return new $type($data);
}
}
Теперь, в вашем контроллере, вы можете сделать что-то вроде этого:
$model = MyModelFactory::Factory(array($_REQUEST['model'] => $_REQUEST));
и теперь у вас есть объект любой модели, указанной в $ _REQUEST ['model']. Обязательно примите все меры безопасности, которые могут понадобиться вашему приложению, чтобы убедиться, что у пользователя есть разрешения на использование модели, которую он запрашивает
Теперь, так как вы хотите использовать общие методы и прочее, ваши модели, вероятно, должны основываться на абстрактном классе / интерфейсе ... поэтому вместо
class MyModelOne extends Model {
// stuff
}
Вы, вероятно, хотите что-то подобное, чтобы гарантировать, что требуемые методы всегда будут доступны:
abstract class MyAbstractModel extends Model {
protected $search_params;
public function __construct($data = array()) {
$search_params = $data['search_params'];
}
protected function GetSearchParameters() {
return $this->search_params;
}
abstract public function GetData();
abstract public function GetColumns();
abstract public function DefineViewOptions();
}
class MyModelOne extends MyAbstractModel {
public function GetData() {
$params = array();
$params[] = $this->db->escape_str($this->GetSearchParameters());
// return whatever data you want, given the search parameter(s)
}
public function GetColumns() {
// return some columns
}
public function DefineViewOptions() {
// return some configuration options
}
}