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 :: Проектирование

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
VestCoastman
Отправлено: 19 Ноября, 2013 - 10:04:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




Имеется общий класс вида
PHP:
скопировать код в буфер обмена
  1. class obj{
  2.    public $db;
  3.    public $tpl;
  4.    public $user;
  5.    public $news;
  6.    public function __construct(){
  7.       $this->db = new db;
  8.       $this->tpl = new tpl;
  9.       $this->user = new user;
  10.       $this->user = new news;
  11.    }
  12. }
  13.  
  14. $obj = new obj;


Естественно у всех объектов есть свои конструкторы, которые делают запрос(ы) к базе.
Теперь, если мне понадобится, например, в классе news проверить, существует ли пользователь, я должен сделать extends класса user и вызвать его конструктор еще раз, а это еще + к запросам в базу, что является неверным вариантом + еще и вызовет ошибку, т.к. нет extends db

Объясните, как быть Растерялся ?
 
 Top
EuGen Администратор
Отправлено: 19 Ноября, 2013 - 10:21:08
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Проясните для себя, как связаны Ваши сущности. Почему news должен быть наследником user ? Каким образом проверка пользователя относится к классу news ? И как это связано с классом, приведённым выше?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
_Dark_
Отправлено: 19 Ноября, 2013 - 10:36:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


У вас все неправильно.
 
 Top
VestCoastman
Отправлено: 19 Ноября, 2013 - 10:38:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




_Dark_, без аргументов, я могу сказать о вас тоже самое

EuGen, News я взял для примера. Предположим, что новости могут просматривать только авторизованные пользователи, следовательно, чтобы это узнать и нужен класс юзер.

(Отредактировано автором: 19 Ноября, 2013 - 11:20:53)

 
 Top
VestCoastman
Отправлено: 19 Ноября, 2013 - 14:15:14
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




Всё. Реорганизовал структуру, сделал всё, что не классы базы, пользователи или конфигурация - модулями с конструкторами, принимающими как аргумент объект, состоящий из перечисленных классов. Ни нагрузки, ни глобальных переменных, ни путаницы=)

P.S. Тему можно закрывать.

(Отредактировано автором: 19 Ноября, 2013 - 14:15:35)

 
 Top
_Dark_
Отправлено: 19 Ноября, 2013 - 15:44:24
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


Непонятно зачем создавать какой-то один объект, который содержит остальные классы, плохо группируемые друг с другом («db» «tpl»), а затем передавать его это экземпляр в конструктор других классов.
Либо я не так понял, что вы сделали, либо у вас по прежнему все неправильно.
 
 Top
caballero
Отправлено: 19 Ноября, 2013 - 16:43:53
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Непонятно зачем создавать какой-то один объект, который содержит остальные классы, плохо группируемые друг с другом («db» «tpl»), а затем передавать его это экземпляр в конструктор других классов.

по вашему нужно все наследовать?
во первых в PHP нет множественногог наследования , во вторых есть классическое правило проектирования в ООП: между наследованием и агрегацией - отдавать предпочтение агрегации.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
_Dark_
Отправлено: 19 Ноября, 2013 - 19:25:15
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


caballero пишет:
по вашему нужно все наследовать?
во первых в PHP нет множественногог наследования , во вторых есть классическое правило проектирования в ООП: между наследованием и агрегацией - отдавать предпочтение агрегации.Зачем наследоват

Я не про это.
Судя по словам автора темы, сейчас он сделал так:
Спойлер (Отобразить)


Это как-то не комильфо.
 
 Top
alexxorlovv
Отправлено: 27 Ноября, 2013 - 01:00:22
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Сент. 2013  
Откуда: Москва


Помог: 0 раз(а)




Попробуйте сначала спроектировать сущности. Что от чего отталкивается что наследуется. Для этого хорошо бы знать UML. Посмотрите как делают это другие.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB