Я не могу передать переменную, это будет слишком много работы.
Вы уверены, что хотя? Люди склонны переоценивать усилия по обходу зависимостей. Если вы делаете это в конструкторе, это обычно довольно просто сделать.
Тем не менее, вы можете по-разному использовать общую функциональность в php. Самое простое - использовать глобальную функцию. Например. функция, которая не принадлежит ни одному классу. Другой вариант - использовать метод статического класса. Эти два очень похожи; за исключением их синтаксиса, они по существу имеют те же свойства. Немного более слабое связанное решение состоит в том, чтобы поместить функциональность как метод в (абстрактный) базовый класс, из которого расширяется ваш конкретный класс. Это разделяет функциональность между всеми дочерними классами.
Общим для вышеупомянутых решений является то, что они имеют связь по времени компиляции. Вы не можете изменить зависимость во время выполнения, что делает ваше приложение довольно жестким. Их главное преимущество - низкий уровень сложности, который они несут.
Если вы хотите более слабосвязанное приложение, вы можете попытаться заменить жесткую зависимость переменной, чтобы получить уровень косвенности. Самое простое - создать объект и сделать его глобальным для всего приложения. Есть несколько способов сделать это в PHP, например, синглтон или просто переменная в глобальной области видимости (доступ к ней можно получить с помощью ключевого слова global
или с помощью массива $GLOBALS
).
В то время как глобальные переменные предлагают уровень косвенности, они также имеют большую сложность, поскольку очень трудно определить, какие части приложения зависят друг от друга. По этой причине их часто избегают опытные программисты. Это особенно верно, если переменная имеет состояние; Проблема менее распространена, если общий объект не имеет состояния.
Единственный способ избежать опасности глобальных переменных - использовать вместо этого локальные переменные. Например. Чтобы передать зависимости вокруг. Это может быть немного хлопотно, но по моему опыту, это часто не такая большая проблема, как кажется. По крайней мере, выгоды часто перевешивают проблемы. Тем не менее, есть методы, чтобы облегчить боль; В частности, контейнеры для инъекций для зависимостей, которые являются автоматическими фабриками, которые позаботятся о всей проводке для вас. Они имеют свой уровень сложности, но для больших приложений они, безусловно, могут быть хорошим решением.