Dalam pembangunan PHP moden, suntikan kebergantungan adalah teknologi yang sangat diperlukan. Ia membolehkan kami mengurus kerumitan kod dengan lebih mudah dan menggalakkan penggunaan semula dan kebolehselenggaraan kod. Sebagai rangka kerja PHP yang popular, ThinkPHP6 juga menyediakan cara mudah untuk melaksanakan bekas suntikan-Ioc kebergantungan.
Bekas Ioc ialah Penyongsangan Kawalan (Bekas), iaitu corak kilang umum yang digunakan untuk melaksanakan suntikan pergantungan objek. Melalui bekas Ioc, kita boleh memisahkan penciptaan objek dan suntikan kebergantungan objek. Dalam ThinkPHP6, bekas IoC disepadukan ke dalam komponen teras rangka kerja dan boleh digunakan sepanjang aplikasi.
Jadi, bagaimana cara menggunakan bekas Ioc dalam ThinkPHP6 untuk melaksanakan suntikan pergantungan? Kami akan menerangkannya secara terperinci di bawah.
Langkah 1: Cipta kelas yang perlu di instantiated
Pertama, kita perlu mencipta kelas yang perlu instantiated dan tentukan dependencies yang perlu disuntik dalam kelas ini. Sebagai contoh, di sini kita mencipta kelas UserService dan menyuntik contoh kelas UserRepository dalam pembina.
namespace appservice; use appepositoryUserRepository; class UserService { protected $userRepository; public function __construct(UserRepository $userRepository) { $this->userRepository = $userRepository; } public function getUserList() { return $this->userRepository->getList(); } }
Langkah 2: Buat kelas bergantung
Seterusnya, kita perlu mencipta kelas bergantung UserRepository terlebih dahulu. Dalam contoh, kami hanya mentakrifkan kaedah getList yang mengembalikan senarai semua pengguna.
namespace appepository; class UserRepository { public function getList() { return ['user1', 'user2', 'user3']; } }
Langkah 3: Konfigurasi bekas Ioc
Sekarang, kita perlu mengkonfigurasi bekas Ioc dalam fail konfigurasi aplikasi. Dalam ThinkPHP6, fail konfigurasi terletak dalam direktori konfigurasi Adalah disyorkan agar kami membuat fail konfigurasi container.php yang baharu.
Dalam fail konfigurasi ini, kita perlu mendaftarkan kelas yang perlu dijadikan instantiate dan kelas yang bergantung kepada mereka supaya bekas Ioc boleh menyuntik kebergantungan dengan betul.
Anggapkan bahawa kami telah mencipta dua kelas, UserService dan UserRepository Kami perlu mendaftarkannya dalam bekas seperti berikut:
use appserviceUserService; use appepositoryUserRepository; return [ 'services' => [ UserService::class => function($container) { return new UserService( $container->get(UserRepository::class) ); }, ], 'repositories' => [ UserRepository::class => new UserRepository(), ], ];
Dalam kod di atas, kami mula-mula menambah kelas UserService dan bergantungnya. Kelas UserRepository didaftarkan dengan jenis perkhidmatan ('perkhidmatan') dan repositori ('repositori'). Perkhidmatan ini boleh disuntik, tetapi gudang tidak perlu disuntik, jadi perkhidmatan itu perlu menggunakan fungsi panggil balik untuk mencipta objek dan menyuntik kebergantungan, manakala gudang diwujudkan secara langsung dan didaftarkan.
Langkah 4: Gunakan bekas Ioc
Akhir sekali, kita perlu menggunakan bekas Ioc untuk membuat instantiate perkhidmatan yang didaftarkan dalam bekas.
Dalam contoh kami, kami boleh menggunakan bekas Ioc dalam pengawal untuk menyuntik UserService dan kaedah panggilan. Dalam kod tertentu, kita boleh menulis seperti ini:
namespace appcontroller; use appserviceUserService; use thinkacadeContainer; class UserController { public function index() { $userService = Container::get(UserService::class); $userList = $userService->getUserList(); return json($userList); } }
Dalam kod di atas, kita mula-mula menggunakan kaedah get bekas untuk mendapatkan contoh UserService, kemudian panggil kaedah getUserList untuk mendapatkan senarai pengguna, dan kembalikan senarai dalam format json .
Selepas melengkapkan konfigurasi di atas, kami berjaya menggunakan bekas Ioc ThinkPHP6 untuk melaksanakan suntikan pergantungan.
Ringkasan
Dalam artikel ini, kami menerangkan secara terperinci cara menggunakan bekas Ioc ThinkPHP6 untuk melaksanakan suntikan pergantungan. Melalui bekas Ioc, kita boleh memisahkan suntikan pergantungan objek daripada penciptaan objek, menjadikan kod lebih mudah untuk diurus dan diselenggara. Pada masa yang sama, bekas Ioc juga boleh memudahkan logik kod kami dan meningkatkan kebolehgunaan semula dan kebolehujian kod.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan bekas Ioc untuk melaksanakan suntikan pergantungan dalam ThinkPHP6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!