Задать вопрос

Почему объект создается два раза?

Помогите найти причину двойного создания объекта...

index.php
define( 'ACCESS', TRUE);
include_once("core/config.class.php");//подключаем класс настроек
include_once("core/core.class.php");//подключаем класс ядра(основных функций)
$core = new core();

if($_SERVER['REQUEST_URI'] != '/'){
	$UrlParts = explode('/', trim($_SERVER['REQUEST_URI'], '/'));//чистим от "/"
	$Module = array_shift($UrlParts);//отделяем имя модуля
	if(count($UrlParts) % 2 == 0 && file_exists($core -> PATH_MODULE_FILE.$Module.'.php')){
		for ($i=0; $i < count($UrlParts); $i++) {
            $Options[$UrlParts[$i]] = $UrlParts[++$i];
		}
	}else{
		$Module = 'c404';
		$Options = FALSE;		
	} 
}else{
	header('Location: //'.$core -> SITE_URL.'/'.$core -> DEFAULT_MODULE);
}

require_once($core -> PATH_MODULE_FILE.$Module.'.php');
$controller = new $Module($Options);

echo $controller -> respaun.'</br>';

echo $Module.'</br>';
print_r($Options);


core.class.php
class core extends Settings{
	
	protected $IndConnect = '';//идентификатор коннекта к базе данных
	
	//подключение к БД
	public function __construct(){
		session_start();//включаем сессии
		//подключаемся к БД
		$dbconnect = @mysql_connect($this -> NAME_HOST, $this -> NAME_USER, $this -> PASS_USER);
		if(!$dbconnect){
			exit($this -> error('База не найдена: '.mysql_error()));
		}
		$this -> IndConnect = $dbconnect;
		//выбираем БД
		mysql_select_db($this -> NAME_DB, $dbconnect) or exit ($this -> error('Таблица не найдена: '.mysql_error()));
		//ставим локаль
		mysql_query("SET NAMES utf8");
	}
		
	//запись в лог ошибок
	public function error($error){
		$faleopen = fopen($this -> PATH_LOG_FILE, 'a');
		$strip_text = '| '.date('H:m:s d.m.Y').' '.$error."\r\n";
		fwrite($faleopen, $strip_text);
		fclose($faleopen);
	}
}


запись ошибки происходит в файл...так вот, почему-то обьект core создается дважды...т.е. все действия в __construct выполняются по два раза...

Что я написал не так?
  • Вопрос задан
  • 2569 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Когда вы пишите такой код, я становлюсь грустным пандой.

tumblr_loqfm0r1UJ1qludboo1_500.gif

По делу если, то конструктор должен вызваться один раз, если это действительно весь код который учавствует во всей этой вакханалии. Самым простым вариантом будет поставить xdebug, поставить бряку в конструкторе и посмотреть call trace в случае если действительно вызывается дважды. Более изысканные способы подразумевают различные комбинации var_dump и die в разных частях кода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
akubintsev
@akubintsev
Опытный backend разработчик
Да пожалуй больше половины не так написано.
Что мешает запустить отладку через xdebug?
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
И банальное: проверьте по access-логу, что сам скрипт вызывается то же самое количество раз, что и хочется вам.

PS: прекратите насиловать уже десятилетие как протухший mysql_*. Используйте современные PDO или mysqli.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы