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 :: Как реализовать общее хранилище объектов классов
Покинул форум
Сообщений всего: 66
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
Всем здрасьте!
Вобщем суть заключается в следующем, на входе имеется класс который принимает некоторый массив с параметрами, проверяет их, и производит цикличное подключение и создание нескольких объектов классов(6 штук), записывая созданные объекты в общий массив с соответствующими именами! Некоторые из этих классов могут использовать методы друг друга(к примеру есть класс логирования и класс расширений, так вот класс расширений использует методы из класса логирования)
Так вот как можно реализовать данную систему что бы структура доступа к массиву с объектами сохранялась и была доступна из каждого объекта класса
Вот примерно такая
$this->Objects - общий массив с объектами классов
$this->Objects->Debugging
$this->Objects->Extension
$this->Objects->Registry
и т.д. ( в примере привел вызов классов как свойство объекта, по той причине что хочу преобразовать массив в object)
По сути понимаю общую картину, должно получиться что то типо глобального супер класса в котором будет храниться все!
Попробовал систему наследований, ничего не вышло(возможно что то неправильно делал), инкапсуляция не подходит, хотелось вы собрать 6 колесный велосипед по аналогии системы наследования, таким образом что бы в дальнейшем после запуска системы, в каждом классе был доступ к любому них!
Что можете подсказать по этому поводу? (Добавление)
И еще хотелось бы добавить про то почему именно что типо наследования, дело в том что классы как я уже писал выше подключаются и создаются на автомате!
Я просто пытаюсь написать что то типо микро фреймворка(просто набираюсь опыта) и хочу добится такой структуры с системе, что бы не нужно было вызывать в каждом классе к примеру класс синглтон в котором будет находится этот массив с объектами, а что бы все происходило на автомате, то есть к примеру если взять определенный контроллер и унаследовать его от вот этого самого глобального супер класса то внутри контроллера можно будет использовать те самые объекты классов о которых я писал выше
caballero
Отправлено: 27 Июня, 2014 - 22:07:48
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
не очень понятно зачем обьекты сваливать в массив да еще и прнобразовывать массив в какой то обьект. Такоетощущение что вы не очень понимаете разницу между классом и объектом.
Покинул форум
Сообщений всего: 66
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
caballero, приветствую! Я очень хорошо понимаю разницу между массивом и объектом! Тут не в этом суть! Суть в том что хотелось бы иметь во всей системе одну древовидную структуру!
Если быть еще точнее, вот конкретно что именно не получается реализовать, это то, что бы классы которые подключаются и создаются в цикле знали о существовании друг друга! последовательное наследование это тоже не то что нужно!
DelphinPRO
Отправлено: 27 Июня, 2014 - 22:16:48
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Designer пишет:
По сути понимаю общую картину, должно получиться что то типо глобального супер класса в котором будет храниться все!
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
Designer
А зачем Вам понадобился массив объектов во всех классах? Вы же не будете использовать в каждом классе все эти объекты. Они должны быть созданы только тогда когда в них есть необходимость. Я думаю лучше использовать autoload.
Designer пишет:
Некоторые из этих классов могут использовать методы друг друга
Если это происходит внутри самого класса, то обычно это плохая практика.
1. По хорошему каждый класс должен описывать решение одной задачи
2. Плохо, когда есть неоправданная зависимость, стремитесь к адекватной абстракции
Designer
Отправлено: 27 Июня, 2014 - 22:25:29
Гость
Покинул форум
Сообщений всего: 66
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
DelphinPRO, спасибо конечно за предоставленный код, но это уже реализовано!
Вобщем попробую еще раз объяснить.
Есть класс загрузчик системы, он внутри себя подключает 6 файлов в цикле и в этом же цикле создает их объекты то есть
Так вот тут и начинается проблема, они внутри не знают друг о друге! И я не могу понять как реализовать систему единого массива со всеми объектами этих классов таким образом что бы внутри них можно было друг другом пользоваться, я конечно делал инкапсуляцию последовательную, но этот тип реализации не совсем хорошо! (Добавление)
teddy, по поводу второго пункта, почему неоправданная зависимость?
допустим в каждом классе можно использовать для отладки методы класса Benchmark ( то есть подсчет времени выполнения того или иного метода) а так же Debugging ( для записи логов)
И что происходит далее если конечно реализую такую систему, при подключении контроллера, он как бы наследуется и получает доступ в этому самому массиву с объектами
и внутри контроллера я уже вызываю нужное мне расширение(иными словами модель что было понятно) а так же проверяю данные url строки по ключу из объекта Router и так далее, плюс объект класса Extension, внутри себя имеется метод подгрузки и создания расширения ( и при написании кода расширения в файле, я само собой буду имень доступ к БД или Registry, то есть по необходимости можно будет воспользоваться любым классом, вместо того что бы их постоянно создавать) , я пытаю сделать систему что бы подключить базовые классы, создать их объекты запомнить их с 1 хранилище и получать доступ по аналогии привиденной в 1 посте (Добавление)
Вот такая вот замудренная система! (Добавление)
Я не скажу что возможно это правильный подход в построении, но на данный момент(да и вообще для практики) хотелось бы попробовать такое реализовать! 1 единственный момент на данном этапе не позволяет реализовать это, он описан в 3 посте! (Добавление)
Ребят если есть у кого немного времени свободного хотя бы минут 15-20, оставьте свой скайп в ЛС, хотелось бы с обьяснить ситуацию во первых словами, а во вторых выслушать мнение и возможность реализации от более профессионального человека! Если конечно не трудно
teddy
Отправлено: 27 Июня, 2014 - 22:49:55
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
Designer пишет:
допустим в каждом классе можно использовать для отладки методы класса Benchmark
Ну отладили Вы свой код, что же потом? Когда закончится Ваша "отладка", эти методы будут висеть в Ваших классах мертвым грузом.
Designer пишет:
а так же Debugging ( для записи логов)
А кто Вам мешает делать логирование за пределами класса?
Designer пишет:
при подключении контроллера, он как бы наследуется и получает доступ в этому самому массиву с объектами
Покинул форум
Сообщений всего: 66
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
teddy, да да, упустил описать этот момент, я о нем конечно же знаю и прочитал в вашем сообщении, но даже если я буду его использовать, ситуацию автолоад не изменит!
caballero
Отправлено: 27 Июня, 2014 - 23:16:52
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Так вот тут и начинается проблема, они внутри не знают друг о друге!
а зачем обьекту database или debugger знать о роутере или router о template ?
Цитата:
проверяю данные url строки по ключу из объекта Router
задача роутера обычно перенаправить запрос в нужный контроллер и передать ему параметры - на фига контроллеру лезть к роутеру.
в любом случае разделяемые объекты типа debugger или database реализуются синглетоном. Те которые не синглетоны - имеют множественные экземпляры а следовательно сваливание в какой то массив бессмысленно
Цитата:
ситуацию автолоад не изменит
разумеется неумение програмировать никакой автолоад не изменит. Почему бы вам не взять несколько фреймворков , известных, с хорошим описанием и не посмотреть как делают профессиональные команды. начните с того же CodeIgniter
там и доки и русское комюнити.
Покинул форум
Сообщений всего: 66
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
Цитата:
а зачем обьекту database или debugger знать о роутере или router о template ?
Я понимаю конечно к чему вы клоните! тут не в этом суть, поймите! Все эти классы, они все равно обязаны быть подключены в начале выполнения, понимаете?! и использование того или иного класса само собой будет происходить по назначению в соответствующих местах!
А то что вы пишите зачем классу БД знать о роутере или шаблоне, на это могу ответить обратное, а что мешает вызвать класс роутера допустим в методе класса работы с БД?! само собой ничего, но ведь все должно быть на своих местах, верно?! так вот и пользоваться необходимым классом в нужном месте, в данной системе можно будет без необходимости создания нового экземпляра, потому как повторюсь они один фиг создаются в самом начале при инициализации системы(потому как идет разбор url затем проверка существования файла контроллера наличие в нем класса и т.д.)
caballero
Отправлено: 27 Июня, 2014 - 23:43:48
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Я понимаю конечно к чему вы клоните!
сомневаюсь.
Цитата:
Все эти классы, они все равно обязаны быть подключены в начале выполнения, понимаете?!
куда подключены? в начале выполнения чего?
Цитата:
и использование того или иного класса само собой будет происходить по назначению в соответствующих местах!
так зачем их подключать в каком то "начале" если неизвестно будет ли класс вообще использоватся? К примеру зашли на страницу а роутер перекинул на другую. ну и нафига тут все остальные классы?
Цитата:
а что мешает вызвать класс роутера допустим в методе класса работы с БД
наличие здравого смысла. Даже не представляю ситуацию зачем такое может понадобится.
Цитата:
но ведь все должно быть на своих местах, верно
КО подтверждает. Но по какому принципу определяются эти "места" ?
Цитата:
в данной системе можно будет без необходимости создания нового экземпляра
синглетон решает эту задачу в любой системе
Цитата:
они один фиг создаются в самом начале при инициализации системы(потому как идет разбор url затем проверка существования файла контроллера наличие в нем класса и т.д.)
зачем создавать то что может не понадобится (см. коментарий выше)? А синглетон создает экземпляр при первом обращении к нему.
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
caballero пишет:
Почему бы вам не взять несколько фреймворков , известных, с хорошим описанием и не посмотреть как делают профессиональные команды.
+1
LIME
Отправлено: 29 Июня, 2014 - 00:21:39
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Designer ты в упор не видишь что в примере DelphinPRO используется статическое свойство?
caballero пишет:
на фига контроллеру лезть к роутеру.
иногда лезет
в Symfony роутер может создать объект из модели чтоб проверить его существование и отдать 404 если нет
и в контроллере он сразу доступен через роутер
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.