Покинул форум
Сообщений всего: 10
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Здравствуйте, Господа! Не так давно приступил к изучению php. Почитал немного литературы и статьей, скачал видео курс "Объектно-ориентированный подход в PHP". При воспроизведении кода из видео уроков столкнулся с проблемой.
Есть класс Config(в файле config.php) с полями для работы с DB. Его наследник класс db( в файле bd.php) осуществляет коннект к DB и выполнение запросов. Создаю файл mmenu.php который использует db.php, затем создаю cmenu.php который, в свою очередь, использует mmenu.php.
Листинги: config.php
Проблема в том что на странице db.php все проходит без проблем, осуществляется конект и выбор БД.
А вот в cmenu.php выбор БД не проходит! Пробовал вывести значение $DB_NAME в db.php. Если открыть db.php то значение выводиться. Если открыть cmenu.php то $DB_NAME пустое!
Пытался сам найти в чем проблема, но не смог! Вроде всё правильно написано... работаю в eclipse + plugin Aptana. php среда XAMPP 2.5. версия php 5.3.8
Подскажите, пожалуйста, в чем может быть дело?!
Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010
Помог: 13 раз(а)
В классе Mmenu нужно сделать:
public function __construct() {
parent::__construct();
}
caballero
Отправлено: 22 Апреля, 2012 - 10:17:54
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Вроде всё правильно написано...
Даже близко неправильно.
Глупо наследовать DB от Config - это разные сущности.
Еще глупее наследовать объекты от DB с конектом - теперь в каждом из екземпляров класса будет свой конект к серверу БД .
Покинул форум
Сообщений всего: 10
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
ams пишет:
В классе Mmenu нужно сделать:
public function __construct() {
parent::__construct();
}
не помогло. в cmenu.php так же не проходит выбор БД(((
caballero пишет:
Глупо наследовать DB от Config - это разные сущности.
Еще глупее наследовать объекты от DB с конектом - теперь в каждом из екземпляров класса будет свой конект к серверу БД .
ни разу не спорю о правильности данной конструкции как о коде боевого проекта. Но речь не об этом. Вопрос почему из файла cmenu.php не осуществляется выбор БД? А если точнее почему наследник не получает значение поля родителя? Ведь если попробовать вывести в db.php переменную $DB_MANE, при открытии db.php она выводиться. При открытии cmenu.php не выводиться.... в чем тут собака зарыта?
dadli
Отправлено: 22 Апреля, 2012 - 11:06:12
Посетитель
Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011 Откуда: тифилис
Помог: 5 раз(а)
Agation
прастите за офтоп но в етом видеоуроке так обявлени своиства:
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
public - аналог var. но так как существует обратная совместимость то var успешно будет работать. просто лучше писать public
----- Just do it
Agation
Отправлено: 22 Апреля, 2012 - 12:39:10
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
dadli,Panoptik, хорошо. С модификатором public ситуация та же. Не может из cmemu.php отобразиться значение $DB_NAME.... Может дело в настройках php сервера?
Panoptik
Отправлено: 22 Апреля, 2012 - 12:49:00
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
нет, сервер тут не причем. покажите лучше как вы пытаетесь прочитать переменные
----- Just do it
caballero
Отправлено: 22 Апреля, 2012 - 13:08:22
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
ни разу не спорю о правильности данной конструкции как о коде боевого проекта
Не надо вырабатывать привычку говнокодить. Иначе и в боевом будет то же самое.
В данном случае нужно использовать агрегацию а еще лучше синглктон.
Но раз ты уж плодишь отдельные конекты на кажлый объект то надо писать
$db_select = mysql_select_db($this->DB_NAME,$this->connection);
и распечатай сам объект
$var = new Cmenu;
var_dump($var);
чтобы посмотреть что там внутри.
если открываем cmenu.php то ничего не выводиться ни из db.php ни из cmenu.php
caballero пишет:
Не надо вырабатывать привычку говнокодить.
а я и не кодил вообщем, просто воспроизводил, о чем и упомянул в первом посте.
ноль реакции на var_dump прописанный в cmenu.php
в db.php var_dump($db) выдаёт инфу об объекте и значение полей унаследованных от Config
caballero
Отправлено: 22 Апреля, 2012 - 13:52:42
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
сложи все классы в один отдельный файл и пробуй в одном месте
а вообще в таких случаях неплохо бы дебаггер юзать
Покинул форум
Сообщений всего: 10
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
caballero пишет:
а вообще в таких случаях неплохо бы дебаггер юзать
не спорю. но пока не брался за эту тему. попробовал тем что аптана предложила - получил в браузере что-то типа var_dump'а. точки останова не срабатывают, значение переменных в ходе выполнения скрипта проследить не могу.
насчет всё в один файл - уверен на 100% что будет работать. Но в данном случае хочется разобратся с подключением файлов. Очень печально будет потом где-то встретиться с данной проблемой не имея опыта её решения...
Panoptik
Отправлено: 22 Апреля, 2012 - 13:59:07
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
ничего не выводится может в случае ошибки в коде. напишите в начале файла
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.