Artikel ini membawakan anda pengetahuan yang berkaitan tentang PHP, yang terutamanya memperkenalkan isu berkaitan suntikan dependensi DI sebenarnya merujuk kepada pergantungan pada kelas melalui suntikan automatik, mari kita lihat. Saya harap ia akan membantu semua orang.
(Tutorial disyorkan: Tutorial video PHP)
Dependency Injection DI Malah, ia pada asasnya bermakna bahawa kebergantungan pada kelas disuntik secara automatik melalui pembina
Dalam istilah orang awam, ini bermakna anda sedang mengendalikan kelas, tetapi beberapa kaedah atau fungsi kelas ini tidak dapat diselesaikan dengan kelas ini sahaja, tetapi hanya boleh dicapai dengan bantuan kelas lain
Tanda paling langsung ialah apabila data parameter dihantar sebagai objek. Tegasnya, jika anda ingin mengendalikan satu kelas dalam kelas lain, terdapat hubungan saling bergantung antara kedua-dua kelas Kaedah lulus parameter dipanggil suntikan
. Apabila suntikan kebergantungan tidak digunakan, apabila PHP perlu menggunakan kelas lain dalam satu kelas, operasi berikut sering dilakukan
Sebagai contoh, jika saya perlu menggunakan kelas penyesuai dalam kelas kontena, saya perlu lakukan ia sebelum menggunakannya.
Jika sebilangan besar kelas luaran perlu digunakan, ini akan menyebabkan tahap gandingan menjadi terlalu tinggi, yang boleh membawa kepada kesukaran penyelenggaraan kemudian
Dalam istilah awam, ini bermakna bekas tidak boleh dipisahkan untuk berfungsi, yang dipanggil gandingan terlalu tinggi
<?php class container { private $adapter; public function __construct() { $this->adapter = new adapter(); } }
Kod di atas digandingkan terlalu tinggi, yang membawa kepada kemunculan suntikan pergantungan Ia adalah terutamanya untuk memahami Gandingan
Dalam kes berikut, kita hanya perlu lulus dalam objek kelas yang perlu dikendalikan
Parameter bagi. Operasi suntikan pergantungan adalah objek, bukan parameter biasa Adakah anda mempunyai pemahaman yang lebih baik
Tetapi suntikan pergantungan yang mudah akan menyebabkan jika anda bergantung pada banyak kelas, ia akan mengambil masa yang lama untuk lulus parameter dan. ia akan menjadi mudah untuk dikelirukan
<?php class container { private $adapter; public function __construct(adapter $adapter) { $this->adapter = $adapter; } }
Untuk menyelesaikan masalah kekeliruan parameter di atas, suntikan kebergantungan telah dioptimumkan pada masa ini
Melalui kaedah ajaib, __get set objek
Pada masa ini, kita boleh menyelesaikan masalah terlalu banyak kebergantungan , masalah kekeliruan parameter
<?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();
Kami mula-mula menentukan kelas kontena, yang digunakan terutamanya untuk menyuntik kelas yang anda ingin kendalikan ke dalam bekas
Apabila menggunakannya, anda hanya perlu melepasi objek kontena
<?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); //我是调度器
Dalam aplikasi di atas, kami secara langsung menyuntik objek yang di instantiated ke dalam bekas
Ini akan menyebabkan semua objek dijadikan instantiated sebelum ia digunakan, menyebabkan kehilangan sumber
Kami boleh membuat penutupan supaya objek tidak akan disegerakan Bagi suntikan, apabila anda perlu menggunakannya sendiri, anda boleh membuat instantiat untuk mengurangkan kehilangan sumber pelayan
<?php $container = new container(); $container->adapter = new adapter(); //高阶优化 $container = new container(); $container->adapter = function () { return new adapter(); };
Tutorial video PHP)
Atas ialah kandungan terperinci Hanya faham suntikan pergantungan DI dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!