Как решить зависимость класса от другого класса?
Есть 2 класса, Tools и Config.
Классу Config нужно api COLORS из класса Tools, классу Tools нужно api ARGUMENTS из Config.
Как поступить? Я уже на setter/getter посматриваю, но пока ничего толкового не придумал. Может фасад заюзать?
const config = new Config(new Tools(this)); const tools = new Tools(config); |
const config = new Config(new Tools(this)); const tools = new Tools(config);
Дополнительно:
Может какой-то Dependency Injection?)
Вообще, если у вас два класса столь "плотно" зависят друг от друга, значит их общую зависимость нужно вынести в другой класс
У вас циклическая зависимость. Это первейший признак того, что вы что-то неправильно спроектировали. Выносите функционал, используемый обоими классами, в третий класс. Тогда вы избавитесь от циклической зависимости.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для решения зависимости класса от другого класса в PHP можно использовать паттерн Dependency Injection (внедрение зависимостей). Этот подход позволяет передавать зависимости классу через конструктор или метод, что делает класс более гибким и упрощает тестирование.
Прежде всего, необходимо определить интерфейс для взаимодействия с зависимым классом. Это позволит заменить конкретную реализацию зависимости на другую без изменения основного класса. Создадим интерфейс:
interface DependencyInterface { public function doSomething(); }
Затем создадим класс, который зависит от другого класса через инъекцию зависимости:
class MainClass { private $dependency; public function __construct(DependencyInterface $dependency) { $this->dependency = $dependency; } public function performAction() { $this->dependency->doSomething(); } }
Теперь создадим конкретную реализацию зависимости:
class Dependency implements DependencyInterface { public function doSomething() { // Реализация метода } }
Используя Dependency Injection, мы можем передать экземпляр зависимости в конструктор главного класса:
$dependency = new Dependency(); $mainClass = new MainClass($dependency); $mainClass->performAction();
Таким образом, мы убрали прямую зависимость класса MainClass от класса Dependency, что делает код более гибким и упрощает его тестирование. В случае необходимости замены зависимости, достаточно создать новую реализацию интерфейса и передать её в конструктор главного класса.