![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 08.12.2016
Сообщений: 6
|
![]()
Всем привет,
возник вопрос есть свой движок вот такая структура входа получается (используется автолоадер классов) идет запрос страницы, запускается скрипт index.php где прогружаются все нужные модули и прочее (у админки свой index.php, у самого сайта свой index.php), далее загружается класс Index (у админки свой Index, у сайта свой Index), который наследуется от класса Base, который в свою очередь наследуется от SuperBase (имена для примера привел) в классе SuperBase подгружаются нужные классы и переменные, которые используются на всем сайте, а вот классы Base разные, у админки свой Base, у самого сайта (тот что видят люди) свой Base - соответственно в каждом Base подгружаются свои методы и переменные в итогде в классе Index содержатся все необходимое для работы админки или сайта (в зависимости, где мы это дело вызываем) так вот, на данный момент у меня все работает так как написано выше и вот так как напишу далее: т.е. после того как в Index классе мы подгрузили все что нам надо, он (класс Index) загружает необходимый класс (в зависимости что мы запросили), ну например категории настроек в админке ссылка будет вида: index.php?module=settings&script=ca tegory (просто для примера) т.е. будет вызван класс Category из пространства имен Settings (ну не суть), в свою очередь этот Category наследуется так же от Base (в данном случае Base относится к админке) и по сути проиходят двойные вызовы всего, что есть в Base и в SuperBase так вот вопрос, я сейчас хочу переделать все это дело вот в таком варианте: ссылка все так же ведет на index.php?module=settings&script=ca tegory (просто для примера) подгружается как я написал выше Index класс, который в свою очередь наследуется и получает все необходимое и он вызывает класс Category из пространства имен Settings и передает в конструктор класса Category $this (пример: $class = new Category($this)) и в классе Category я уже в конструкторе делаю присвоение function __construct($context) { $this->context = $context; $this->db = $this->context->db; и т.д } но получается тут происходит дублирование переменных т.е. мне придется делать $this->что-то = $context->что-то для всех переменных, которые есть в Base и в SuperBase классах как избежать такого дубляжа? может быть вообще эта структура не верна в корне и кто-то сможет посоветовать как лучше сделать структуру? т.е. задача, что бы все мои классы, которые вызывает Index имели доступ к методам, которые загружаются в Base и SuperBase (там помимо своих методов, в них инициализируются другие классы, например в которых просто полезные функции, так вот к ним так же доступ нужен) заранее благодарю если что непонятно написал, задавайте вопросы, постараюсь расписать более подробно |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
![]() Цитата:
PHP код:
Some Category Name I'm a Base method! Caller: Category I'm a SuperBase method! Caller: Category I'm a just Category method! Caller: Index I'm a Base method! Caller: Index I'm a SuperBase method! Caller: Index $index->base = Base attribute $index->super_base = SuperBase attribute $category->base = Base attribute $category->super_base = SuperBase attribute |
|
![]() |
![]() |
![]() |
#3 | |
Новичок
Джуниор
Регистрация: 08.12.2016
Сообщений: 6
|
![]() Цитата:
т.е. вот как в реале: Код:
I'm construct from SuperBase! I'm construct from Base! I'm construct from SuperBase! I'm construct from Base! Some Category Name I'm a Base method! Caller: Category I'm a SuperBase method! Caller: Category I'm a just Category method! Caller: Index I'm a Base method! Caller: Index I'm a SuperBase method! Caller: Index $index->base = Base attribute $index->super_base = SuperBase attribute I'm construct from SuperBase! I'm construct from Base! $category->base = Base attribute $category->super_base = SuperBase attribute обрати внимание на два раза вызов SuperBase и два раза вызов Base Последний раз редактировалось KDVMan; 08.12.2016 в 11:44. |
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
![]() Цитата:
Зачем Category наследовать от Base, если использование Category происходит через Index, который уже наследует Base? Смысл наследования – это получить функционал родителя. Ок, функционал Base->SuperBase доступен в Index – зачем этот же функционал нужно иметь в Category, если Category работает через Index? |
|
![]() |
![]() |
![]() |
#5 | |
Новичок
Джуниор
Регистрация: 08.12.2016
Сообщений: 6
|
![]() Цитата:
а Index это по сути управление какой класс загрузить (в нашем примере это Category) и этот Index загружает Category и должен дать ему ВСЕ что умеет сам (т.е. все наследия от Base и SuperBase) и при передаче в Category $this из Index ($class = new Caategory($this)) придется в Category делать нечто типа function __construct($context) { $this->super_base = $context->super_base; $this->base = $context->base; и т.д. } т.е. по сути дубль, если мне придется добавить какую=то переменную в Base или SuperBase, то и в конструкторе Category придется еще добавлять $this->новая_переменная = $context->новая_переменная как-то так ![]() |
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
![]()
Так пардон, а нафига тогда Category получать от Index «все наследия от Base и SuperBase» – если сам же Category напрямую наследуется от Base и SuperBase?!?
|
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 08.12.2016
Сообщений: 6
|
![]()
это сейчас он (Category) наследуется от Base и SuperBase поэтому и получаются двойные вызовы конструкторов этих двух классов (Base и SuperBase), проблема в том что у меня в этих конструкторах вызываются классы, которые обращаются к БД и получаются двойные вызовы... вот поэтому я и хочу переделать, что бы класс Category вызывался из Index с передачей параметров, но сам Category уже ни от кого не наследуется...
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
![]()
Так просто наследуй Category от Index – и получишь в Category весь функционал Index + Base + SuperBase.
Для классов работы с БД есть singleton. |
![]() |
![]() |
![]() |
#9 | |
Новичок
Джуниор
Регистрация: 08.12.2016
Сообщений: 6
|
![]() Цитата:
$index = new Index(); $index->init(); и в самом Index классе вот так вызываются классы: $className = $this->funcs->getClassName(); $obj = new $className(); т.е. вот этот $this->funcs например как раз и подгрузился из Base а вот этот className это завимит от того как мы зашли index.php?module=settings&script=bl abla1 будет вызван из Index класса вот этот класс: Blabla1 если зашли index.php?module=settings&script=ga ga2 будет вызван из Index класса вот этот класс: Gaga2 и т.д т.е. Index это своего рода управленец всеми классами, у него есть весь нужный функционал и он должен раздавать его другим классам |
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
![]() Цитата:
Иначе как ты себе представляешь этот самый процесс «раздачи функционала»? |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C# Передача параметров | Тамерлан Абилов | Помощь студентам | 6 | 09.11.2014 23:05 |
Наследование. Полиморфизм. Передача параметров. C++ | Bitter_Schokolade | Помощь студентам | 3 | 06.04.2013 23:13 |
Передача параметров | _Mixer_ | Общие вопросы по Java, Java SE, Kotlin | 0 | 22.09.2011 20:17 |
Передача параметров | aesoem | Общие вопросы Delphi | 8 | 15.07.2008 21:51 |
Передача параметров | Gudzon | Общие вопросы Delphi | 12 | 08.02.2007 08:19 |