Directory
- What is DI/Dependency Injection
- The reason why dependency injection appears
- Simple Dependency injection
- High-level dependency injection
- Application of dependency injection
- High-level dependency injectionOptimization
php Editor Baicao will take you to delve into Dependency Injection (DI) in PHP. Dependency injection is a software design pattern that helps improve the flexibility and maintainability of code. This article will introduce in detail the concepts, principles and practical applications of DI in PHP, helping you better understand and apply dependency injection technology.
What is DI/Dependency Injection
Dependency injection DI actually refers to the automatic injection of dependencies on classes through the constructor
In layman's terms, it means that you are currently operating a class, but some methods or functions of this class cannot be completed by this class alone, but must be completed with the help of another class
The most direct sign is when the parameter data is passed as an object. Strictly speaking, if you want to operate one class in another class, there is an interdependence relationship between the two classes. The method of passing parameters is called injection
php editor Baicao will take you to delve into Dependency Injection (DI) in PHP. Dependency injection is a software design pattern that helps improve the flexibility and maintainability of the code. This article will introduce in detail the concepts, principles and practical applications of DI in PHP, helping you better understand and apply dependency injection technology.
The reason why dependency injection appears
When dependency injection is not used, PHP When you need to use another class in one class, you will often perform the following operations
For example, if I need to use the adapter class in the container class, I need to instantiate it before use
If a large number of external classes need to be used, this will cause the coupling degree to be too high, which can easily cause later maintenance difficulties
In layman's terms, that is, the container cannot work without external classes. This is called too high coupling
<?php
class container
{
private $adapter;
public function __construct()
{
$this->adapter = new adapter();
}
}
Copy after login
php editor Baicao will take you to delve into Dependency Injection (DI) in PHP. Dependency injection is a software design pattern that helps improve the flexibility and maintainability of the code. This article will introduce in detail the concepts, principles and practical applications of DI in PHP, helping you better understand and apply dependency injection technology.
Simple dependency injection
The coupling degree of the above code is too high, which leads to the emergence of dependency injection, mainly for decoupling
In the following case, we only need to pass in the class object that needs to be operated
The parameters of dependency injection operation are objects instead of ordinary parameters. Do you have a better understanding?
But such a simple dependency injection will cause if you depend on a lot of classes, it will take a long time to pass parameters and it will be easy to get confused
<?php
class container
{
private $adapter;
public function __construct(adapter $adapter)
{
$this->adapter = $adapter;
}
}
Copy after login
php editor Baicao will take you to delve into Dependency Injection (DI) in PHP. Dependency injection is a software design pattern that helps improve the flexibility and maintainability of the code. This article will introduce in detail the concepts, principles and practical applications of DI in PHP, helping you better understand and apply dependency injection technology.
High-level dependency injection
In order to solve the problem of parameter confusion above, dependency injection has been optimized at this time
Through the magic method, __get sets the object
At this time, we can solve the problem of too many dependencies and confusing parameters
<?php
class container
{
public $instance = [];
public function __set($name, $value)
{
$this->instance[$name] = $value;
}
}
$container = new container();
$container->adapter = new adapter();
$container->autofelix = new autofelix();
Copy after login
php editor Baicao will take you to delve into Dependency Injection (DI) in PHP. Dependency injection is a software design pattern that helps improve the flexibility and maintainability of the code. This article will introduce in detail the concepts, principles and practical applications of DI in PHP, helping you better understand and apply dependency injection technology.
Dependency injection application
We first define a container class, which is mainly used to inject the class you want to operate into the container
When using it, you only need to pass the container object
<?php
class container
{
public $instance = [];
public function __set($name, $value)
{
$this->instance[$name] = $value;
}
}
class adapter
{
public $name = '我是调度器';
}
$container = new container();
$container->adapter = new adapter();
class autofelix
{
private $container;
public function __construct(container $container)
{
$this->container = $container;
}
public function who($class)
{
return $this->container->instance[$class]->name;
}
}
$autofelix = new autofelix($container);
$who = $autofelix->who('adapter');
var_dump($who); //我是调度器
Copy after login
php editor Baicao will take you to delve into Dependency Injection (DI) in PHP. Dependency injection is a software design pattern that helps improve the flexibility and maintainability of the code. This article will introduce in detail the concepts, principles and practical applications of DI in PHP, helping you better understand and apply dependency injection technology.
Dependency Injection Advanced Optimization
In the above application, we directly inject the instantiated object into the container
This will cause all objects to be instantiated before they are used, causing resource loss
We can pass in the closure so that the object will not be instantiated and injected. When you need to use it, instantiate it again, which can reduce the loss of serverresources
<?php
$container = new container();
$container->adapter = new adapter();
//高阶优化
$container = new container();
$container->adapter = function () {
return new adapter();
};
Copy after login
The above is the detailed content of Understand DI dependency injection in PHP in one article. For more information, please follow other related articles on the PHP Chinese website!
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
Latest Articles by Author
-
2024-10-13 13:32:21
-
2024-10-12 11:58:51
-
2024-10-11 20:06:51
-
2024-10-11 18:59:31
-
2024-10-11 18:30:51
-
2024-10-11 15:51:51
-
2024-10-11 15:42:10
-
2024-10-11 14:41:20
-
2024-10-11 14:08:31
-
2024-10-11 13:42:21