Rumah > rangka kerja php > Laravel > teks badan

Bagaimana untuk menulis suntikan kebergantungan laravel

王林
Lepaskan: 2023-05-20 18:38:38
asal
509 orang telah melayarinya

Sebagai rangka kerja PHP yang popular, salah satu ciri terasnya ialah mekanisme Suntikan Ketergantungan (DI). Menggunakan suntikan kebergantungan boleh memisahkan kebergantungan objek daripada objek itu sendiri, dengan itu meningkatkan kebolehbacaan, kebolehujian dan kebolehselenggaraan kod. Artikel ini akan memperkenalkan cara suntikan pergantungan Laravel dilaksanakan dan cara menggunakannya.

  1. Konsep asas

Suntikan kebergantungan ialah corak reka bentuk idea terasnya adalah untuk mengasingkan kebergantungan yang diperlukan oleh objek daripada objek itu sendiri untuk mencapai Mengurangkan gandingan, meningkatkan kebolehujian. , meningkatkan kebolehselenggaraan dan tujuan lain. Dalam rangka kerja Laravel, pelaksanaan mekanisme DI adalah berdasarkan Bekas Suntikan Ketergantungan (selepas ini dirujuk sebagai bekas DI), yang terutamanya merangkumi perkara berikut:

  • Suntikan automatik atribut objek: bekas DI akan Sifat objek yang disuntik perlu disuntik secara automatik.
  • Pengikatan automatik dan resolusi kebergantungan: Bekas DI akan mengikat dan menyelesaikan kebergantungan secara automatik antara kelas.
  • Sokongan mod tunggal: Bekas DI boleh menyokong penggunaan mod tunggal.

Setelah memahami konsep asas bekas DI, kita boleh mula meneroka pelaksanaan khususnya dalam rangka kerja Laravel.

  1. Pelaksanaan bekas DI

Dalam rangka kerja Laravel, pelaksanaan bekas DI adalah berdasarkan bekas perkhidmatan (Bekas Perkhidmatan), iaitu kelas Aplikasi. Kelas App ialah kelas teras bagi keseluruhan aplikasi Ia bertanggungjawab untuk mengurus, mendaftar dan menyelesaikan semua perkhidmatan dan kebergantungan yang perlu digunakan. Oleh itu, ia juga merupakan kelas teras bekas DI dalam Laravel. Mari kita lihat pelaksanaan khusus bekas perkhidmatan.

2.1 Pendaftaran perkhidmatan dan penghuraian

Pendaftaran perkhidmatan dalam Laravel terutamanya merangkumi dua langkah: mendaftar penyedia perkhidmatan dan mendaftar perkhidmatan. Mendaftarkan pembekal perkhidmatan adalah untuk memudahkan pengurusan bersatu dan pendaftaran perkhidmatan dan bukannya mendaftar perkhidmatan secara manual setiap kali. Perkhidmatan pendaftaran adalah untuk menyuntik objek ke dalam bekas DI untuk penghuraian seterusnya.

Pembekal perkhidmatan berdaftar boleh dikonfigurasikan dalam fail konfigurasi config/app.php. Cuma tambah penyedia perkhidmatan dalam tatasusunan penyedia. Contohnya:

'providers' => [
    // Laravel Framework Service Providers...
    IlluminateAuthAuthServiceProvider::class,
    IlluminateBroadcastingBroadcastServiceProvider::class,
    IlluminateBusBusServiceProvider::class,
    IlluminateCacheCacheServiceProvider::class,

    // Application Service Providers...
    AppProvidersAppServiceProvider::class,
    AppProvidersAuthServiceProvider::class,
    AppProvidersEventServiceProvider::class,
    AppProvidersRouteServiceProvider::class,
],
Salin selepas log masuk

Perkhidmatan pendaftaran boleh didaftarkan melalui kaedah bind kelas App. Contohnya:

// 将Foo类注册到DI容器中
app()->bind('foo', function() {
    return new Foo();
});
Salin selepas log masuk

Dalam kod contoh di atas, kami mendaftarkan kelas Foo ke dalam bekas DI melalui kaedah bind dan menentukan alias yang sepadan sebagai foo. Ambil perhatian bahawa dalam Laravel, anda boleh menentukan alias untuk perkhidmatan untuk memudahkan untuk menghuraikan dan memanggil.

Perkhidmatan penghuraian boleh dihuraikan melalui kaedah buat kelas App. Contohnya:

// 通过别名解析Foo类实例
$foo = app('foo');
Salin selepas log masuk

2.2 Resolusi automatik perkhidmatan

Dalam Laravel, bekas DI secara automatik akan menyelesaikan kebergantungan antara kelas, jadi kami tidak perlu melepasi kebergantungan secara manual dan membiarkan bekas DI secara automatik Bantu kami menyelesaikan masalah suntikan pergantungan. Sebagai contoh, kami mempunyai dua kelas berikut:

class Foo {
    public function __construct(Bar $bar) {}
}

class Bar {
    public function __construct(Baz $baz) {}
}
Salin selepas log masuk

Di sini, kelas Foo bergantung pada kelas Bar dan kelas Bar bergantung pada kelas Baz. Jika kita ingin mencipta contoh kelas Foo, maka kita hanya perlu menyelesaikannya melalui bekas DI:

// 自动解析依赖关系,并通过DI容器创建Foo类实例
$foo = app(Foo::class);
Salin selepas log masuk

Di sini, bekas DI secara automatik akan membuat kejadian kelas Bar dan Baz dan menyuntiknya ke dalam kelas Foo dalam pembina.

2.3 Mod perkhidmatan Singleton

Dalam Laravel, kami boleh mendaftarkan perkhidmatan sebagai mod tunggal melalui kaedah singleton, yang bermaksud bahawa contoh yang sama akan dikembalikan setiap kali perkhidmatan dipanggil. Contohnya:

// 将Foo类注册为单例模式
app()->singleton('foo', function() {
    return new Foo();
});
Salin selepas log masuk

Di sini, kami mendaftarkan kelas Foo sebagai mod tunggal melalui kaedah tunggal, yang bermaksud bahawa contoh kelas Foo yang sama akan dikembalikan setiap kali perkhidmatan foo dipanggil.

  1. Ringkasan

Mekanisme kontena DI Laravel sangat memudahkan proses pelaksanaan suntikan kebergantungan, membolehkan kami mengurus dan menggunakan kebergantungan dengan lebih fleksibel dan mudah. Apabila menggunakan rangka kerja Laravel, menguasai penggunaan bekas DI akan meningkatkan kecekapan pembangunan kami dengan banyak, dan juga akan membawa banyak faedah dari segi kebolehujian dan kebolehselenggaraan kod. Artikel ini memperkenalkan konsep asas, pelaksanaan dan penggunaan bekas DI dalam Laravel. Saya harap ia dapat membantu semua orang.

Atas ialah kandungan terperinci Bagaimana untuk menulis suntikan kebergantungan laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan