[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: разделение классов по разным файлам
ITC
Добрый день.

Столкнулись с проблемой после обновления с PHP 5.2 до PHP 5.3.28.

Сейчас имеем: apache22, php5.3.

В логах:
PHP Fatal error: Class 'DB_Result' not found in /www/site/class/class.DB.php on line 224

Содержимое /www/site/class/class.DB.php:
<?php

final class
DB_Result {

private $_result;

public function __construct($result) {
$this->_result = $result;
}
........
}


final class DB {

private $_mysqli;
private $_cache;
private $_prefix;

private function __clone() {

}


........

public function Store_Result() {
if ($result = $this->_mysqli->store_result()) {
[b]return new DB_Result($result);[/b]
}
return false;
}

........

}

Насколько я понял, в файле class.DB.php объявляются два класса: DB_Result и DB, ошибка возникает при попытке вызова (я не программист. могу неверно выразиться ))) класса DB_Result из DB.
Прочел в сети, что в PHP 5.3 перешли к схеме "один файл-один класс", отсюда вопрос: как правильно модифицировать код?

К сожалению откатится на PHP 5.2 нет возможности, а в программировании я не достаточно компетентен, чтобы решить самостоятельно данную проблему.
Требуется помощь специалистов!
SlavaFr
Если DB_Result находится в файле /www/site/class/class.DB.php, то я не знаю как могла появится такая ошибка.


_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Игорь_Vasinsky
include() или __autoload() ?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ITC
разделил классы по разным файлам class.DB.php, class.DB_Result.php, в class.DB.php добавил в начало include ('class.DB_Result.php'); ошибок в логе нет, но и скрипт не работает.

так же поменял private $_result; на public $_result;

P.S. Прочел что по namespace-ам можно разделить в одном файле. не не уверен в последствиях, т.к. не до конца понимаю механизм в масштабах всего сайта.
Игорь_Vasinsky
ну подключи все классы в нужном файле

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ITC
Сделано все по предыдущему сообщению, заметил такую закономерность: после перегрузки апача скрипт отрабатывает, запускает в админку. но следующий клик по любой ссылке выкидывает на страницу ввода пароля и больше не пускает, насколько понимаю проблема в недоступности какой-то переменной, но какой именно не пойму ...
ITC
Нашел в коде функцию _autoload($class), получается классы инклудятся автоматически, удалил мою строку подключения, действительно работает так же (только после перезагрузки апача).
Игорь_Vasinsky
Цитата
только после перезагрузки апача

да не))) рестарт не нужен был для этого))

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ITC
biggrin.gif
Я в смысле, что без рестарта не пускает в админку, ошибок в логах нет.
Если рестартану апача, то входит, но при первом же переходе на любую страницу вываливается на ввод пароля и уже не пусткает, пока не перегружу апач.

По всему понятно, что проблема с сессиями, но в чем именно не пойму ...
ITC
Обратил внимание на присутствие в форме ввода пароля галки "Сохранить сессию", если её поставить то не выкидывает, похоже какие-то костыли на уровне разработки ставили )))

P.S. Как оказалось все очень банально, просто раскидать нужно было классы по файлам, ну и кому-то инклуд может понадобится, у меня так автоинклудер сам все подключил!

Тема закрыта, спасибо Игорь_Vasinsky!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.