Rumah >pembangunan bahagian belakang >masalah PHP >Hanya faham suntikan pergantungan DI dalam PHP

Hanya faham suntikan pergantungan DI dalam PHP

WBOY
WBOYke hadapan
2022-08-10 18:04:561715semak imbas

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)

Apakah itu DI/Dependency Injection

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

Sebab mengapa suntikan pergantungan muncul

. 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();
    }
}

Suntikan kebergantungan mudah

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;
    }
}

Suntikan kebergantungan peringkat tinggi

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();

Aplikasi suntikan kebergantungan

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 = &#39;我是调度器&#39;;
}

$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(&#39;adapter&#39;);

var_dump($who); //我是调度器

Pengoptimuman lanjutan suntikan kebergantungan

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 disyorkan:

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!

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam