Xwab
Форумыnavigate_nextНебольшие вопросы по PHP/MySQL

Проблема с видимостью объекта
Сообщения
mastes

У меня есть 3 класса: Template, Page_Controller, Central_Controller

В классе Central_Controller в конструкторе создаю объект Template. Page_Controller наследует Central_Controller. Проблема в том что в методах класса Page_Controller созданый объект не виден, и когда проверяю есть ли он в методе: if(is_object($obj)) echo 'ok'; else echo 'bad'; Сценарий ничего не выводит. Как исправить подскажите?

10 Янв 2013, 20:22
Okula

Покажи как ты записываешь конструктов в классе Page_Controller

10 Янв 2013, 20:29
mastes

Page_Controller без конструктора

10 Янв 2013, 20:32
Okula

Тогда
[php:1:c1221e5e6b]class Page_Controller extends Central_Controller {

public function __construct() {
parent::__construct();
}

}[/php:1:c1221e5e6b]

10 Янв 2013, 20:36
mastes

ок. Спс
добавлено спустя 5 минут:
Ещё один нюанс. Есть index.php где подключается класс Template и создаётся его объект. Тогда через call_user_func_array в том же index.php запускаю метод. В методе объект не виден. Почему так?
добавлено спустя 6 минут:
Okula, да и parent::__construct(); почему-то не помог: non-object

10 Янв 2013, 20:50
Okula

mastes, предоствь код, иначе гадать в чём проблема можно вечно.

10 Янв 2013, 20:52
mastes

Пробую запустить parent::__construct(); в методе, вылазит ошибка

non-static method central_controller::__construct() cannot be called statically in ...

10 Янв 2013, 20:54
Okula

mastes, покажи код.

10 Янв 2013, 20:56
mastes

http://upwap.ru/2970018

10 Янв 2013, 21:02
Okula

Зачем ты в методе 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 минуту:
И вообще задумайся о автозагрузке классов. Использовать инклуды внутри методов классов - это очень плохо и некрасиво.

10 Янв 2013, 21:15
Ответить на тему