Аналитикам PHP, вопрос касается ООП, нужен совет

malganus

Новичок
Аналитикам PHP, вопрос касается ООП, нужен совет

Пишу CMS, ввёл два класса активный и пассивный модуль. Отличие активного от пассивного, что в конструкторе активного могут выполнятся различные действия (неважно какие), члены и методы классов одинаковые, т.е. отличается только конструктор. Описываю в виде классов:

PHP:
class Module {
  var $model;
  var $view;
  function Module() {
    $this->model = new ModuleModel;
    $this->view = new TemplateEngine;
    // дальнейшая реализация конструктора
  }
}

class ModuleActive extends Module {
  var $n1;
  var $n2;
  var $n3;

  function ModuleActive() {
    parent::Module();
    //реализация конструктора
    switch($actions) {
      case 'action1':
        ...
    }

    function Method1() {
      ...
    }
  }
}

class ModulePassive extends Module {
  var $n1;
  var $n2;
  var $n3;

  function ModulePassive() {
    parent::Module();
    //другая реализация конструктора
    }
  }

    function Method1() {
      ...
    }
}
Вообщем реализация этих двух дочерних классов отличается только конструктором. Возможно ли здесь что-то оптимизировать ?

Есть мысль вынести одинаковые методы в отдельный класс, который занаследовать от Module, а уж от этого класса наследовать ModuleActive, ModulePassive...
 

moxnatiy

Новичок
malganus
так если отличается только конструктор так сделай конструктор по умолчанию и конструктор с некими параметрами.

PHP:
class A {
    function a ($param=null) {
     if ($param ) ...
     else ...
   }
}
 

malganus

Новичок
moxnatiy
Дело в том, что это первая мысль которая пришла мне в голову, но всётаки я решил разбить класс на два, т.к. в первом или втором классе хоть и есть одинаковые методы и члены, но в будущем возможно оба класса будут дополняться различными методами, да и не хотелось сильно перегружать конструктор первого класса, т.к. на него возложена определённая задача, выносить которую в другой метод также не хотелось

Общая мысль такая (упрощенно):

PHP:
foreach ($passive_modules as $module) {
  new "{$module}Module"; 
  //т.е. если $module = News, то создаётся класс NewsModule и т.д.
}

$active_module = $page->getActiveModule;
new "{$active_module}Module";
Какова вероятность, что ОО код не будет работать в будущих версиях php, как например это происходило при переходе с PHP4 на PHP5 ? Существует ли методика написания максимально "правильного" в этом смысле кода ?

-~{}~ 04.03.06 23:41:

Профессионалы, откликнитесь.
 
Сверху