Правильная архитектура CMS, без static методов, с глобальным хранилищем и инициализатором Классов.

ref

Новичок
Прошу помочь советом и ткнуть носом. Встал в ступор на текущей стадии разработки.

Краткая логика работы CMS: При обращении к сайту, в bootstrap.php происходит include всех необходимых файлов - базовый класс модели, контроллера, smarty(в качестве вьювера), и библиотек(об этом ниже). Далее bootstrap.php запускает маршрутизатор, который разбирает url и соответственно уже создаёт экземпляр класса необходимого контроллера, который работает с моделью и видом. С этим проблем и вопросов не возникает.

Вопрос возник вот тут. Как я говорил, у меня есть библиотеки(lib), по сути это простые файлы с классом. Например класс работы с БД - /lib/db.class.php, либо класс работы с сессиями - /lib/session.class.php, есть класс авторизации и регистрации, работы с датой и т.д. К сожалению, я не знаю как эти классы должны правильно называться, поэтому называю их библиотеки и храню в /lib/.

Беда в том, что все классы используют статические методы, и я обращаюсь к ним напрямую как DB::db_select(), DB::db_update, Session::check(), Session::expired($login). Для работы с БД я понимаю, что могу использовать Singleton, но не считаю это выходом.

У меня в голове есть идея, что я должен создать какое-то глобальное хранилище классов, ещё во время выполнения bootstrap.php. И по мере обращения к какому-то классу из любой части приложения, происходит проверка на существование данного экземпляра класса, и при необходимости такой экземпляр создаётся.

И уже в приложении, я мог бы без проблем использовать конструкции типа App::Session->Check(), и в классе App, происходила бы проверка, существует ли экземпляр класса Session, если нет, то создавала бы.

Натолкните как правильно всё-же делать.
 

artoodetoo

великий и ужасный
Ты говоришь про автозагрузчик классов? :confused: в доках по PHP ключевые слова __autoload и spl_autoload_register
Или про автоматическое инстанциирование? "экземпляр класса" это объект, насколько я понимаю.
Если с автозагрузчиком классов всё понятно, то для инстанциирования можешь воспользоваться, скажем, каким-то методом вашего "звездного" класса App, пусть он на основании файла конфигурации или какими-то эвристическими методами понимает чего ты хочешь и выдает нужный объект.
PHP:
$db = App::get('db'); // избавитель от дум про синглтон
 

artoodetoo

великий и ужасный
А кто определяет что моветон? Что вы думаете про PSR-3, скажите пожалуйста? :)
 

fixxxer

К.О.
Партнер клуба
хрень высосанная из пальца. нормальные psr-0 и psr-1, дальше пошла ерунда - где-то в районе psr-2 произошел плавный переход от "давайте все делать так, как делает большинство" к "давайте все делать так, как делаю я".
 

Absinthe

жожо
Беда в том, что все классы используют статические методы, и я обращаюсь к ним напрямую как DB::db_select(), DB::db_update, Session::check(), Session::expired($login). Для работы с БД я понимаю, что могу использовать Singleton, но не считаю это выходом.
Можно воспользоваться паттерном ActiveRecord, где каждый объект представляет собой запись.
 

Lionishy

Новичок
А так же избавитель от подсказок в IDE и превращатель хранилища инстансов в черный ящик.
Синглтон, не синглтон...
Но зачем вам что-то знать про хранилище экземпляров?
И зачем вам подсказка в IDE?

Всё это успешно работает в приложениях на C++. Почему не может работать в PHP?
 

qwerty42

Новичок
Синглтон, не синглтон...
Но зачем вам что-то знать про хранилище экземпляров?
И зачем вам подсказка в IDE?

Всё это успешно работает в приложениях на C++. Почему не может работать в PHP?
>Но зачем вам что-то знать про хранилище экземпляров
Я хочу знать, экземпляры каких классов оно может возвращать. Удивительно, правда?

> И зачем вам подсказка в IDE?
Без комментариев. Вы в блокноте код пишете?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Автор, ответь на вопрос, почему static плохо?

PS: если ты сделал все статикой и почему-то надеялся на синглтон, что он все исправит, (при чем тут он мне непонятно), то все печально.
 

qwerty42

Новичок
Автор, ответь на вопрос, почему static плохо?

PS: если ты сделал все статикой и почему-то надеялся на синглтон, что он все исправит, (при чем тут он мне непонятно), то все печально.
Я не автор, но на мой суъективный взгляд: в статике нет магии и нельзя делать цепочки вызовов. Класс со всеми статическими методами и свойствами - по сути просто неймспейс, никаким ООП там и не пахнет.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
qwerty42
ООП это что получается, цепочки вызовов? Или магия?
 

fixxxer

К.О.
Партнер клуба
Хватит его троллить, он понимает, только сказать не может =)

ООП это Объектно-Ориентированное Программирование. В статиках нет объектов. Точка
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Хватит его троллить, он понимает, только сказать не может =)

ООП это Объектно-Ориентированное Программирование. В статиках нет объектов. Точка
Вы так говорите, как будто это что-то плохое.
 
Сверху