Руслан И.
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 лет назад
Вы в каком классе эти конструктры объявили?
Николай Т.
205 сообщений
#14 лет назад
var_dump(debug_backtrace());
вместо
echo 'test ';
Виталий Я.
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);
сделал, тоже выводится одно и тоже два раза


и в родительском контроллере тоже все исполняется дважды
Руслан И.
73 сообщения
#14 лет назад
Спасибо всем я уже разобрался оказывается сам забыл про один класс
$userslib = Users::init();
он наследует от дочернего контроллера и тоже запускает конструктор еще раз, уже исправил.. еще раз всем спасибо