Конструктор выполняется дважды
73 сообщения
#14 лет назад
Не могу понять почему в конструкторе контроллера дважды выполняются действия,public function __construct()
{
parent::__construct();
$this->model = new Users_Model;
echo 'test ';
}
выведет test test
что так что так
public function __construct()
{
$this->model = new Users_Model;
echo 'test ';
}
и в родительском тоже конструктор вызывается дважды
212 сообщений
#14 лет назад
Вы в каком классе эти конструктры объявили?
659 сообщений
#14 лет назад
Цитата ("speedi"):new Users_Model;
Врятли, но вдруг там у вас тоже естьЦитата ("e1it3"):
echo 'test ';
206 сообщений
#14 лет назад
Почему не знаю, но поделюсь своими наблюдениями.Некоторое время назад на одном из хостингов столкнулся с похожим эффектом: дважды выполнялся код от начала объявления функции до первого UPDATE, в том случае, если перед UPDATE вызывается mysql_insert_id от предыдущего запроса. Так и не понял почему.
До этого года два назад при работе с уже весьма запорченной копией UMI.CMS непостижимым образом дважды выполнялся exit:
exit("!")выводил "!!". Эффект пропал после полной переустановки системы.
Вот такие пироги.
2817 сообщений
#14 лет назад
Цитата ("speedi"):Не могу понять почему в конструкторе контроллера дважды выполняются действия,
public function __construct()
{
parent::__construct();
$this->model = new Users_Model;
echo 'test ';
}
выведет test test
что так что так
public function __construct()
{
$this->model = new Users_Model;
echo 'test ';
}
и в родительском тоже конструктор вызывается дважды
Думаю, имя родительского конструктора Users_Model, или нет?
Объясните, зачем делается вызов parent::__construct(); зачем он??
83 сообщения
#14 лет назад
Цитата ("speedi"):...
и в родительском тоже конструктор вызывается дважды
код конструктора родительского класса в студию (желательно, с названием класа). а также код создания объекта
73 сообщения
#14 лет назад
Вот родительский класс
class Controller {
protected $view;
protected $router;
private $params;
public function __construct()
{
$this->getParams();
$this->view = View::i();
$this->router = Router::i();
}
public function getParams()
{
if (count($_POST)>0)
{
foreach ($_POST as $key=>$val)
$this->params=trim($val);
}
if(count($_GET)>1)
{
$g =0;
foreach ($_GET as $key=>$val)
{
$g++;
if($g>1)
$this->params=trim($val);
}
}
return $this->params;
}
public static function Get($key = null)
{
if(isset($_GET)) return $_GET;
}
public function __get($key = null)
{
if(isset($this->params)) return $this->params;
}
public function getPostParams()
{
$post = new stdClass();
if (count($_POST)>0)
{
foreach ($_POST as $key=>$val)
$post->$key = trim($val);
}
$post->paramcounts=count($_POST);
return $post;
}
public function ajax()
{
return (strtolower($_SERVER) == 'xmlhttprequest') ? true : false;
}
}
вот дочерний класс контроллера
class Users_Controller extends Controller {
public $model;
public $tableusers = 'm_users';
public $userid;
private static $instance = NULL;
public static function i()
{
if (self::$instance === null)
{
self::$instance = new self;
}
return self::$instance;
}
public function __construct()
{
parent::__construct();
$this->model = new Users_Model;
$user = $this->router->getController();
$this->userid = $this->model->existsUser($user);
if (!$this->userid) {
$view404 = new view404('Юзер не найден');
}
echo var_dump(debug_backtrace(),1);
}
public function indexAction()
{
$result = $this->model->getUserById($this->userid);
$this->view->title($result);
$this->view->addjs('/js/jquery.js');
$this->view->addjs('/js/slide.js');
$this->view->addjs(0,$this->view->assign('js/slide', $result));
$userslib = Users::init();
test::i()->say('uid', $userslib->gen_uid());
$this->view->addcontent($this->view->assign('users_index', $result));
$this->view->addLeft($this->view->assign('users_listbrend', $result));
$this->view->render();
}
public function infoAction()
{
$result = $this->model->getUserById($this->userid);
$this->view->title('Информация о пользователе ' . $result);
$this->view->addcontent($this->view->assign('users_index', $result));
$this->view->addLeft($this->view->assign('users_sidebar', $result));
$this->view->render();
}
}
$this->model = new Users_Model;
модель в конструкторе тоже вызывается два раза и все запросы к БД тоже два раза идут
echo var_dump(debug_backtrace(),1);
сделал, тоже выводится одно и тоже два раза
и в родительском контроллере тоже все исполняется дважды