2014-09-05 1 views
0

Итак, у меня есть класс для системы кэширования, класс для соединений с базой данных, массив настроек приложения, класс для обработки разных языков и т. Д. Эти классы все необходимы в большинстве других классов я создаюКак обрабатывать объекты и переменные, которые универсальны в PHP

есть ли лучший способ справиться с этим, чем сделать это:

function __construct($database,$cache,$appsettings,$language,...) { 

в каждом классе у меня есть? Еще одна проблема с этим подходом заключается в том, что я не могу выполнять статические функции, если им требуется подключение к базе данных. Так, например, у меня есть класс пользователей, который теперь имеет функцию getUsernameFromID(), которая использует базу данных для получения этого имени пользователя. Если я использую вышеуказанный подход, мне придется фактически создать пользовательский класс, каждый раз, когда часть кода нуждается в имени пользователя из идентификатора.

Одиночные классы будут решением этого, но другие ответы здесь говорят о том, что они являются плохой практикой в ​​PHP. Сейчас я использую глобальные переменные для этих классов, что также является плохим решением. Что мне делать?

Я надеюсь, что это было достаточно ясно, я делаю все возможное.

+0

Автозагрузчики? http://php.net/manual/en/language.oop5.autoload.php –

+0

Вы можете создать один класс ApplicationState, который содержит состояние текущего приложения, и имеет объекты для кеша, базы данных и т. д. Затем вам нужно будет только добавить экземпляр «ApplicationState» в свои классы, и если вам нужна база данных, вы можете просто вытащить ее из состояния: 'state.getDatabase();' – nickb

+0

В зависимости от вашей существующей архитектуры. Если вы жалуетесь на потерю статических функций, то вероятность того, что ваша архитектура плохо разработана. Если вы застряли в том, что у вас есть, обертка с одним синглом кажется лучшим вариантом. Если нет, взгляните на то, как другие популярные, современные рамки mvc подходят к этому – Steve

ответ

1

Возможно, вы захотите изучить шаблоны проектирования зависимостей зависимостей и обслуживания. Pimple - популярный менеджер инъекций зависимостей.

Одиночные игры не обязательно являются плохими. Много раз мы просто используем их плохо. Например, класс, который управляет своей собственной «единственной», можно рассматривать как анти-шаблон. Он создает зависимость от себя и обеспечивает глобальное использование (вне его собственной сферы действия). Лучше, чтобы управление единичностью осуществлялось с помощью фреймворка или другого объекта, который может обеспечить его выполнение в рамках области действия.