Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: обращение к методам класса БД
далее пытаюсь создать класс пользователя
$USER = new User("1");
и получаю ошибку Call to a member function resnum_qu() on a non-object
догадываюсь, что проблема в том, что класс пользователя "не видит" класс БД.
вопрос: как лучше реализовать программу? наследовать класс БД?
Мелкий
Отправлено: 11 Октября, 2011 - 21:56:56
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
smumrik пишет:
наследовать класс БД?
Ни в коем случае.
smumrik пишет:
как лучше реализовать программу?
Паттерн Singleton обычно используется.
Ну и плюс имена методов разные - resnum_qu и qu
----- PostgreSQL DBA
OrmaJever
Отправлено: 11 Октября, 2011 - 22:03:06
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
smumrik пишет:
function __construct($uid) {
if($db->resnum_qu("SELECT * FROM `USERS` WHERE `ID` = ".$uid." LIMIT 1") != 1) return '';
else $this->row = $db->result();
}
такк... откуда берётся $db? А неоткуда! Потомучто нужно передавать либо параметром либо через global ну или создавать обьект внутри контруктора
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
smumrik
Отправлено: 11 Октября, 2011 - 22:06:22
Новичок
Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Мелкий
почитал в википедии http://ru.wikipedia.org/wiki/Одиночка_(шаблон_проектирования)
ничего не понял, можно подробней?
или все таки прочитать книгу «Приемы объктно-ориентированного проектирования. Паттерны проектирования», Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссилес
нужно? (Добавление)
OrmaJever пишет:
такк... откуда берётся $db? А неоткуда! Потомучто нужно передавать либо параметром либо через global ну или создавать обьект внутри контруктора
а какой вариант более удачный?
мне кажется, что внутри конструктора создавать объет БД неудачный вариант
(а если у меня тысяча объектов, то что и тысяча объектов класса БД что ли) (Добавление)
а как передать параметром? да и что передавать? объект класса БД в конструктор класса USER?
if($db->resnum_qu("SELECT * FROM `USERS` WHERE `ID` = ".$uid." LIMIT 1")!= 1)return'';
else$this->row=$db->result();.......
$USER = new User(2, $db);
echo $USER->row["ID"];
неудачный вариант?
White
Отправлено: 11 Октября, 2011 - 22:40:40
Частый посетитель
Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011 Откуда: Днепропетровск
Помог: 28 раз(а)
smumrik пишет:
function __construct($db,$id) {
$USER = new User($db,1);
так конечно работать будет, но это плохой вариант. решается проблема либо синглтоном, либо статическими методами самого dbclass. можно сделать так в классе dbclass
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.