Home > Backend Development > PHP Problem > Introduction to the Implementation of PHP Inversion of Control and Dependency Injection

Introduction to the Implementation of PHP Inversion of Control and Dependency Injection

WBOY
Release: 2023-03-16 19:52:02
forward
1241 people have browsed it

(Recommended tutorial: PHP video tutorial)

Inversion of control

Inversion of control is a The idea is a design pattern that can reduce coupling.

For example

<?php
class A{
    public function getClassName(){
        echo &#39;我是class A&#39;;
    }
}
class B{
    public $test;
    public function __construct()
    {
        $this->test = new A(); 
        //在类的内部获取依赖的对象。 
        //把依赖的对象写死在 Class B 中,由 Class B 选择依赖的对象,这叫做控制正转。
    }
}
$b = new B();
$b->test->getClassName();
Copy after login

//Output I am class A

The constructor of class B depends on class A. If the dependent class (class A) is Written in the constructor of class B, this way of writing is very highly coupled.

For example, if class A is renamed, we have to modify the code of class B.

If class B does not require class A but class C, we have to modify the code of class B.

In order to solve this problem, we can use the inversion of control design pattern.

<?php
class A{
    public function getClassName(){
        echo &#39;我是class A&#39;;
    }
}
class B{
    public $test;
    public function __construct($obj)
    {
        $this->test = $obj;
        //不在类的内部写死依赖的对象,而是通过外部以参数的形式传入依赖的对象,这叫控制反转。
    }
}
$b = new B (new A()); //注入 class A 的实例
$b->test->getClassName();
Copy after login

//Output I am class A

After modifying the code in this way, the above two problems are better solved.

If class A is renamed, we do not need to modify the code of class B, we only need to modify the parameters passed into the constructor of class B.

If class B does not require class A and class C is required, we do not need to modify the code of class B, we only need to modify the parameters passed into the constructor of class B.

Do not write the dependent class (class A) in the constructor of class B. Instead, when instantiating Class B, pass the dependent class (class A) into the class from the outside in the form of a parameter. In the constructor of class B, when we don't need class A, we only need to modify the parameters passed into the constructor of class B without modifying the code of class B, which greatly reduces the coupling.

In fact, in human language, don’t instantiate the class in the method, but pass the object into the method by passing parameters to the method.

At this point, class B has changed from actively selecting dependencies to passively receiving dependencies from the outside. The method of obtaining dependent objects has been reversed. This is inversion of control.

Dependency injection

Dependency injection passes (injects) the objects that the current method requires (depends on) into the current method in the form of parameters.

Dependency injection has already appeared in the above code

$b = new B (new A()); 
// class B 的构造方法需要一个对象
//注入 class A 的实例
Copy after login

The relationship between inversion of control and dependency injection can be summarized in one sentence. Dependency injection can be used to achieve inversion of control.

(Recommended tutorial:

PHP video tutorial

)

The above is the detailed content of Introduction to the Implementation of PHP Inversion of Control and Dependency Injection. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
php
source:jb51.net
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template