Rumah >rangka kerja php >Laravel >Bagaimana untuk menulis suntikan kebergantungan laravel
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.
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:
Setelah memahami konsep asas bekas DI, kita boleh mula meneroka pelaksanaan khususnya dalam rangka kerja Laravel.
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, ],
Perkhidmatan pendaftaran boleh didaftarkan melalui kaedah bind kelas App. Contohnya:
// 将Foo类注册到DI容器中 app()->bind('foo', function() { return new Foo(); });
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');
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) {} }
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);
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(); });
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.
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!