Инверсия управления (IOC) определяет способ использования объектов, но не определяет, как их создавать. IOC определяет отношения между классом высокого уровня и классом деталей, где класс высокого уровня зависит от класса деталей. Классы высокого и низкого уровня связаны путем абстрагирования класса деталей в IOC. В этой статьи мы объясним, как реализовать IOC в PHP.
Пример 1. Реализуйте IOC с помощью функции метода
Чтобы следовать этому примеру, создайте файл PHP со следующим скриптом. Здесь ClassA зависит от ClassB и ClassC. Если ClassB или ClassC изменены, это повлияет на ClassA. Если ClassB и ClassC разрабатываются разными программистами, тогда возникнет проблема зависимости. Эту проблему может решить МОК. В сценарии объявлены две переменные, которые действуют как объектные переменные ClassB и ClassC. Когда вызывается функция method() класса ClassA, тогда инициализируются $ClassB и $ClassC, и вызываются функции method() классов ClassB и ClassC.
<? php // Определить ClassA class ClassA { public $ClassB; public $ClassC; public function ClassA() { echo "<h2 style = 'color: red'>Инициализация ClassA</h2>"; } public function method() { $this->ClassB = new ClassB(); $this->ClassC = new ClassC(); $this->ClassB->method(); $this->ClassC->method(); } } // Определение ClassB class ClassB { public function ClassB() { echo "<h2 style = 'color: blue'>Инициализация ClassB</h2>"; } public function method() { echo "<h3 style = 'color: blue'>Вывод из ClassB</h3>"; } // Определение ClassC class ClassC() public function ClassC() { echo "<h2 style = 'color: green'>Инициализация ClassC</h2>"; } public function method() { echo "<h3 style = 'color: green'>Вывод из ClassC</h3>"; } } // Создаем объект ClassA $object = new ClassA(); // Вызов метода method() function $object->method(); ?>
Вывод:
Следующий результат будет получен при запуске вышеуказанного скрипта с веб-сервера. Здесь конструктор трех классов вызывается при создании ClassA. Затем вызываются функции method() классов ClassB и ClassC для генерации вывода.
Пример 2: Реализация IOC с помощью конструкторов
Чтобы следовать этому примеру, создайте файл PHP со следующим скриптом. Здесь конструктор ClassA зависит от ClassB и ClassC. ClassB и ClassC передаются в качестве аргументов конструктору ClassA. ClassB и ClassC будут созданы вне ClassA. Следовательно, если что-либо изменяется в ClassB или ClassC, то никаких изменений в ClassA не требуется. Отформатированное текстовое сообщение будет напечатано из конструктора ClassB и ClassC. Функции method() классов ClassB и ClassC вызываются из функции method() класса ClassA.
ClassB = $b; $this->ClassC = $c; } public function method() { $this->ClassB->method(); $this->ClassC->method(); } } // Определение ClassB class ClassB { public function ClassB() { echo "<h2 style = 'color: blue'>Инициализация ClassB</h2>"; } public function method() { echo "<h3 style = 'color: blue'>Вывод из ClassB</h3>"; } } // Определить ClassC class ClassC { public function ClassC() { echo "<h2 style = 'color: green'>Инициализация ClassC</h2>"; } public function method() { echo "<h3 style = 'color: green'>Вывод из ClassC</h3>"; ClassA ( новый ClassB() , новый ClassC() ); // Вызов метода method() function $object->method(); ?>
Вывод:
Следующий результат будет получен при запуске вышеуказанного скрипта с веб-сервера. Здесь первые две строки вывода были созданы конструктором ClassB и ClassC. Затем были вызваны функции method() классов ClassB и ClassC, и был сгенерирован результат.
Пример 3: Реализация IOC с использованием наследования
Чтобы следовать этому примеру, создайте файл PHP со следующим скриптом. Здесь ClassA и ClassB не связаны, а childClass1 и childClass2 наследуют ClassB. Конструктор ClassA принимает объект другого класса в качестве аргумента и инициализирует переменную класса $Class_obj. Эта переменная класса используется для вызова функции method() объекта класса, который используется в конструкторе ClassA.
Class_obj = $obj; { public function method() { $this->Class_obj->method(); } } // Определение ClassB class ClassB { public function method() { echo "<h3 style = 'color: blue'>Вывод из ClassB</h3>"; } } // Определение class childClass1 extends ClassB { public function method() { echo "<h3 style = 'color: blue'>Вывод из childClass1</h3>"; } } // Определение class childClass2 extends ClassB { public function method() { echo "<h3 style = 'color: red'>Вывод из childClass2</h3>"; } } // Создаем объект ClassA $object = new ClassA( new childClass1() ); // Вызов функции method() $object->); ?>
Вывод:
Следующий результат будет получен при запуске вышеуказанного скрипта с веб-сервера. Объект childClass1 был передан в качестве аргумента при создании ClassA, который является дочерним классом ClassB. Здесь не обязательно знать, от какого класса унаследован childClass1. После инициализации ClassA переменная класса $Class_obj вызвала функцию method() для childClass1 и распечатала текст в качестве вывода.
Заключение
IOC – это продвинутая концепция объектно-ориентированного программирования. В этом руководстве мы показали вам, как реализовать IOC в PHP, используя несколько простых примеров.