У меня есть 3 класса: Template, Page_Controller, Central_Controller
В классе Central_Controller в конструкторе создаю объект Template. Page_Controller наследует Central_Controller. Проблема в том что в методах класса Page_Controller созданый объект не виден, и когда проверяю есть ли он в методе: if(is_object($obj)) echo 'ok'; else echo 'bad'; Сценарий ничего не выводит. Как исправить подскажите?
Page_Controller без конструктора
10 Янв 2013, 20:32Тогда
[php:1:c1221e5e6b]class Page_Controller extends Central_Controller {
public function __construct() {
parent::__construct();
}
}[/php:1:c1221e5e6b]
ок. Спс
добавлено спустя 5 минут:
Ещё один нюанс. Есть index.php где подключается класс Template и создаётся его объект. Тогда через call_user_func_array в том же index.php запускаю метод. В методе объект не виден. Почему так?
добавлено спустя 6 минут:
Okula, да и parent::__construct(); почему-то не помог: non-object
Пробую запустить parent::__construct(); в методе, вылазит ошибка
non-static method central_controller::__construct() cannot be called statically in ...
Зачем ты в методе index_action() класса main пишешь parent::__construct(); это нужно писать только в конструкторе дочернего класса.
И откуда у тебя берётся переменная $tpl в этом методе (index_action())?
добавлено спустя 3 минуты:
Хотябы сделай переменную $tpl свойством класса central_controller.
Этот пример будет работать:
[php:1:1563132461]class central_controller {
protected $tpl;
public function __construct(){
a_include('system/classes/template');
$this->tpl = new template();
}
}
class main extends central_controller{
public function __construct(){
parent::__construct();
}
public function index_action(){
echo 'This is main controller.<br />';
$this->tpl->display();
}
}[/php:1:1563132461]
добавлено спустя 1 минуту:
И вообще задумайся о автозагрузке классов. Использовать инклуды внутри методов классов - это очень плохо и некрасиво.