Chapter 1: Xiao Ming and his mobile phone
Once upon a time there was a man named Xiao Ming
Xiao Ming has three major hobbies, smoking and drinking... Ahem, sorry, I went to the wrong set. It should be browsing Zhihu, playing King Pesticide and grabbing WeChat red envelopes
Xiao Ming’s three major hobbies
We use a simple pseudo-code to create a Such Xiao Ming
class Ming extends Person { private $_name; private $_age; function read() { //逛知乎 } function play() { //玩农药 } function grab() { //抢红包 } }
However, as a human being, Xiao Ming has no way to achieve the above functions by himself. He must rely on a mobile phone, so he bought an iphone6. Next, let’s make one iphone6
class iPhone6 extends Iphone { function read($user="某人") { echo $user."打开了知乎然后编了一个故事 \n"; } function play($user="某人") { echo $user."打开了王者农药并送起了人头 \n"; } function grab($user="某人") { echo $user."开始抢红包却只抢不发 \n"; } }
Xiao Ming cherishes his new mobile phone very much and controls it firmly in his hand every day, so Xiao Ming becomes like this
class Ming extends Person { private $_name; private $_age; public function __construct() { $this->_name = '小明'; $this->_age = 26; } function read() { //…… 省略若干代码 (new iPhone6())->read($this->_name); //逛知乎 } function play() { //…… 省略若干代码 (new iPhone6())->play($this->_name);//玩农药 } function grab() { //…… 省略若干代码 (new iPhone6())->grab($this->_name);//抢红包 } }
Today is Saturday, Xiao Ming does not have to go to work, so He got up, browsed Zhihu, played King Pesticide, and grabbed a red envelope.
$ming = new Ming(); //小明起床 $ming->read(); $ming->play(); $ming->grab();
At this time, we can see the output in the command line as follows
Xiao Ming opened Zhihu and made up a story
Xiao Ming opened the King Pesticide and sent it Killed
Xiao Ming started to grab the red envelope but could only grab it but not give it out
On this day, Xiao Ming had a fulfilling life. He felt that he was the happiest person in the world.
Chapter 2: Xiao Ming’s happiness and sadness
Xiao Ming and his mobile phone once spent a wonderful time together. When he had free time, he hugged Using his mobile phone, browsing Zhihu, browsing Weibo, and playing games, he felt that he didn't need a girlfriend at all, as long as he had his mobile phone by his side, he would be satisfied.
But who would have thought that system updates again and again completely shattered his dream, his phone became more and more laggy, and the battery life became shorter and shorter, until one day In the cold wind, his cell phone finally couldn't stand the cold and turned it off without looking back.
Xiao Ming was very sad. He realized that he had to change his mobile phone.
In order to get a better user experience, Xiao Ming gritted his teeth and bought an iPhone One problem he encountered was that he had relied too much on the original iPhone 6, and they were deeply coupled. If he wanted to change his phone, he would have to take a knife to transform himself and remove all the methods in his body. All iphone6s have been replaced by iphoneX.
Long transformation process
After a long transformation process, Xiao Ming finally replaced all iphone6 in the code with iphoneX. Although it is very hard, Xiao Ming feels that he is happy.
So Xiao Ming happily took his mobile phone to work, but was stolen by a thief on the way back. For emergencies, Xiao Ming had no choice but to reuse the iPhone 6 that had just been abandoned. However, when he thought of the long transformation process, Xiao Ming felt unspeakably aggrieved. He felt that he was too dependent on his mobile phone. Why did he feel that every time something went wrong with his mobile phone? He has to transform himself. This is not just over-coupling, it is simply putting the cart before the horse. He shouted to the sky, I don’t want to control my mobile phone anymore.
The creator in the sky, that is, me as a programmer, heard his cry. I told him, you don’t need to control your phone anymore, leave it to me to manage, give me the control. . This is called inversion of control.
Chapter 3: The Wisdom of the Creator
Xiao Ming heard what I said. He was both happy and a little scared. He knelt down and kowtowed a few times, piously. Said: "It turns out that you are the legendary creator, God Bagmek. I heard you just said the four words of control inversion, which is to hand over the control of the mobile phone from my hands to you, but this It’s just your idea, it’s just a thought. What method can be used to achieve inversion of control and allow me to continue using my mobile phone?” After that, I threw down four big words, "Dependency Injection!"
Next, the great me began to make inhumane changes to Xiao Ming, as follows
class Ming extends Person { private $_name; private $_age; private $_phone; //将手机作为自己的成员变量 public function __construct($phone) { $this->_name = '小明'; $this->_age = 26; $this->_phone = $phone; echo "小明起床了 \n"; } function read() { //…… 省略若干代码 $this->_phone->read($this->_name); //逛知乎 } function play() { //…… 省略若干代码 $this->_phone->play($this->_name);//玩农药 } function grab() { //…… 省略若干代码 $this->_phone->grab($this->_name);//抢红包 } }
Next, let's simulate running Xiao Ming One day
$phone = new IphoneX(); //创建一个iphoneX的实例 if($phone->isBroken()){//如果iphone不可用,则使用旧版手机 $phone = new Iphone6(); } $ming = new Ming($phone);//小明不用关心是什么手机,他只要玩就行了。 $ming->read(); $ming->play(); $ming->grab();
Let’s first see if the iphone The mobile phone is injected directly into his body. He does not need to care about which mobile phone he is holding, he just needs to use it directly.
This is dependency injection.
Chapter 4: Xiao Ming’s insightsXiao Ming’s life began to become simpler, and he spent all the time he saved writing notes. Write this in your notebook
I used to have a strong desire to control and relied too much on my mobile phone, which resulted in a high degree of coupling between me and my mobile phone. As long as there was a slight problem with my mobile phone, I would have to transform myself. This is really a waste of time. It’s easy to go wrong. Since I gave control to the Creator, He has already chosen a mobile phone for me before waking me up every day. I just need to play with it as usual, without caring about what kind of mobile phone it is. Even if there is a problem with the mobile phone, it can be solved directly by the Creator. There is no need to modify myself. I have now bought seven mobile phones and handed them over to the Creator. I change one every day. I am so happy!
I also gained this insight: If the function implementation of a class A requires the help of class B, then class B is said to be a dependency of class A. If the class is instantiated inside class A, B, then there will be a high degree of coupling between the two. Once there is a problem with class B, class A also needs to be transformed. If there are many such situations and there are many dependencies between each class, then there will be conflicts. If the whole body is affected by one attack, the program will be extremely difficult to maintain and problems will easily occur. To solve this problem, it is necessary to extract the control of Class A from Class B and hand it over to a third party. Reversing the control to the third party is called Inversion of Control (IOC Inversion Of Control). Inversion of control is an idea and a possible result that can solve problems, and dependency injection (Dependency Injection) is its most typical implementation method. A third party (we call it an IOC container) controls the dependency and injects it into class A through methods such as constructors, attributes, or factory patterns, thus decoupling class A and class B to a great extent.
Recommended tutorial: "PHP Tutorial"
The above is the detailed content of Deeply understand how dependency injection achieves decoupling. For more information, please follow other related articles on the PHP Chinese website!

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP makes it easy to create interactive web content. 1) Dynamically generate content by embedding HTML and display it in real time based on user input or database data. 2) Process form submission and generate dynamic output to ensure that htmlspecialchars is used to prevent XSS. 3) Use MySQL to create a user registration system, and use password_hash and preprocessing statements to enhance security. Mastering these techniques will improve the efficiency of web development.

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP remains important in modern web development, especially in content management and e-commerce platforms. 1) PHP has a rich ecosystem and strong framework support, such as Laravel and Symfony. 2) Performance optimization can be achieved through OPcache and Nginx. 3) PHP8.0 introduces JIT compiler to improve performance. 4) Cloud-native applications are deployed through Docker and Kubernetes to improve flexibility and scalability.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment