Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Artikel untuk bercakap tentang suntikan kebergantungan DI dalam php

Artikel untuk bercakap tentang suntikan kebergantungan DI dalam php

青灯夜游
青灯夜游ke hadapan
2022-08-25 10:50:383511semak imbas

Apakah suntikan pergantungan DI? Artikel berikut akan memberi anda pemahaman yang mendalam tentang suntikan pergantungan DI dalam PHP. Saya harap ia akan membantu anda!

Artikel untuk bercakap tentang suntikan kebergantungan DI dalam php

Apakah itu DI/Dependency Injection

  • 依赖注入DI Sebenarnya, ia pada asasnya merujuk kepada pergantungan pada sesuatu kelas melalui pembinaan Penyiapan Alat 自动注入
  • Dalam istilah orang awam, ini bermakna anda sedang mengendalikan kelas, tetapi beberapa kaedah atau fungsi kelas ini tidak boleh diselesaikan oleh kelas ini sahaja, tetapi memerlukan keupayaan 借助另一个类 Tanda paling langsung bagi
  • yang lengkap ialah apabila data parameter dihantar sebagai objek. Tegasnya, anda 想在一个类中操作另一个类, kedua-dua kelas telah membentuk hubungan saling kebergantungan, dan kaedah lulus parameter dipanggil 注入

Sebab mengapa suntikan kebergantungan muncul

  • Apabila suntikan kebergantungan tidak digunakan, php apabila anda perlu menggunakan kelas lain dalam satu kelas, anda sering melakukan operasi berikut
  • Sebagai contoh, saya berada dalam container kelas Jika anda perlu menggunakan kelas adapter, anda perlu membuat instantiat sebelum menggunakannya
  • Jika anda perlu menggunakan sejumlah besar kelas luaran, ini akan menyebabkan 耦合度太高, yang boleh dengan mudah. sebab nanti 维护困难
  • Dalam istilah awam, container tidak boleh berfungsi tanpa kelas luaran Ini dipanggil 耦合度太高
<?php
class container
{
    private $adapter;

    public function __construct()
    {
        $this->adapter = new adapter();
    }
}

Suntikan pergantungan mudah

    Tahap gandingan kod di atas adalah terlalu tinggi, yang membawa kepada kemunculan
  • , terutamanya untuk kes 依赖注入解耦合
  • berikut untuk lulus objek kelas yang perlu dikendalikan Hanya masukkan
  • Parameter operasi adalah 依赖注入, 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对象
  • 混乱
Tinggi- suntikan kebergantungan tahap
<?php
class container
{
    private $adapter;

    public function __construct(adapter $adapter)
    {
        $this->adapter = $adapter;
    }
}

Untuk menyelesaikan masalah

di atas, suntikan kebergantungan telah dioptimumkan pada masa ini
    Melalui kaedah ajaib,
  • menetapkan objek 参数混乱
    Pada masa ini, kami boleh menyelesaikan masalah terlalu banyak kebergantungan dan parameter yang mengelirukan__get
Aplikasi suntikan dependensi
<?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 mentakrifkan , yang digunakan terutamanya untuk menambah

pada bekas Apabila menggunakan kelas yang anda mahu kendalikan
  • , anda hanya perlu melepasi bekas 容器类 注入
  • 对象
  • Pengoptimuman Lanjutan Suntikan Kebergantungan
<?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 menyuntik objek yang di instantiated ke dalam bekas

    Ini akan menyebabkan semua objek dijadikan instantiated sebelum digunakan Sekali lagi, mengakibatkan
  • 直接
  • kita boleh
  • supaya objek tidak akan di instantiated dan disuntik Apabila anda perlu menggunakannya sendiri, instantiate sekali lagi dan anda boleh mengurangkan 资源的损耗
  • 传入闭包服务器资源的损耗Pembelajaran yang disyorkan: "
  • Tutorial Video PHP
"
<?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!

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