Я работаю над пользовательской структурой и задаю пару вопросов о создании родительского класса через дочерние классы.Создание в расширенных классах
Я вставить некоторые фрагменты кода, а затем попасть в вопросы
class CFrameWork {
private $applicationName = "Application Name";
function __construct($instance = "development") {
echo "Hello, I am the Parent and I have been constructed<BR />";
}
public
function startApplication() {
$this->checkMaintenanceMode();
if (!isset($_GET['query'])) {
$this->intialize();
} else {
// Call the appropriate controller
// Method and function are pulled from the query
// Code not displayed
// EDITS BELOW
if (method_exists($method, $function)) {
try {
call_user_func(array(new $method, $function), $this);
} catch (CFException $exp) {
$this->show404();
exit;
}
} else {
$this->show404();
exit;
}
}
}
}
Далее мы имеем класс контроллера
class childController extends CFrameWork {
function index() {
echo "Index Controller";
}
function register() {
echo "Registration Controller";
}
}
Теперь в index.php, у меня есть
$application = new CFrameWork();
$application->startApplication();
Способ, которым эта платформа интерпретирует запросы:
локальный/childController/индекс - Вызывает индекс() функция в классе childController локальный/childController/регистрация - Вызывает функцию регистра() в классе childController
и так далее ...
Итак, вот моя забота. Родительский класс в этой структуре запускается дважды каждый раз при вызове метода контроллера. Один раз - index.php (где создается начальное приложение), а затем контроллером при его расширении. Другими словами, CFrameWork :: __ construct() создается снова каждый раз, когда достигается метод контроллера.
Мои вопросы:
1) это имеет какой-либо вредное воздействие?
2) Можно ли этого избежать?
3) Любые предложения о том, как вы это сделаете по-другому?
Вы искали одноточечные рисунки ООП? –
Ваш контроллер, вероятно, не должен расширять класс, запускающий приложение, но класс главного контроллера. – jeremyharris
Сам по себе, 'класс childController extends CFrameWork' имеет плохой запах кода. Контроллер [IS-NOT-A] (http://en.wikipedia.org/wiki/Liskov_substitution_principle), так почему он наследует от одного? – Jon