ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Инверсия управления в PHP

Как скачать и сохранить удаленное изображение с помощью PHP

Инверсия управления (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 для генерации вывода.

Инверсия управления в PHP

 

Пример 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, и был сгенерирован результат.

Инверсия управления в PHP

 

Пример 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 и распечатала текст в качестве вывода.

Инверсия управления в PHP

 

Заключение

IOC – это продвинутая концепция объектно-ориентированного программирования. В этом руководстве мы показали вам, как реализовать IOC в PHP, используя несколько простых примеров.

Exit mobile version