Apakah suntikan pergantungan DI? Artikel berikut akan memberi anda pemahaman yang mendalam tentang suntikan pergantungan DI dalam PHP. Saya harap ia akan membantu anda!
依赖注入DI
Sebenarnya, ia pada asasnya merujuk kepada pergantungan pada sesuatu kelas melalui pembinaan Penyiapan Alat 自动注入
借助另一个类
Tanda paling langsung bagi 想在一个类中操作另一个类
, kedua-dua kelas telah membentuk hubungan saling kebergantungan, dan kaedah lulus parameter dipanggil 注入
php
apabila anda perlu menggunakan kelas lain dalam satu kelas, anda sering melakukan operasi berikut container
kelas Jika anda perlu menggunakan kelas adapter
, anda perlu membuat instantiat sebelum menggunakannya 耦合度太高
, yang boleh dengan mudah. sebab nanti 维护困难
container
tidak boleh berfungsi tanpa kelas luaran Ini dipanggil 耦合度太高
<?php class container { private $adapter; public function __construct() { $this->adapter = new adapter(); } }
依赖注入
解耦合
依赖注入
, bukan parameter biasa Adakah anda mempunyai pemahaman yang lebih baik? suntikan pergantungan yang mudah sedemikian akan menyebabkan jika anda Terdapat banyak kelas bergantung, dan ia akan mengambil masa yang lama apabila anda melepasi parameter, yang mudah对象
混乱
<?php class container { private $adapter; public function __construct(adapter $adapter) { $this->adapter = $adapter; } }
参数混乱
__get
<?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();
容器类
注入
对象
<?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); //我是调度器
直接
资源的损耗
传入闭包
服务器资源的损耗
Pembelajaran yang disyorkan: "<?php $container = new container(); $container->adapter = new adapter(); //高阶优化 $container = new container(); $container->adapter = function () { return new adapter(); };
Atas ialah kandungan terperinci Artikel untuk bercakap tentang suntikan kebergantungan DI dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!