Bagaimana untuk menggunakan suntikan pergantungan dalam rangka kerja Kajona?

WBOY
Lepaskan: 2023-06-03 14:04:02
asal
1310 orang telah melayarinya

Kajona ialah rangka kerja sumber terbuka PHP ringan yang memfokuskan pada kemudahan penggunaan dan kebolehskalaan serta menyediakan banyak alatan dan komponen praktikal, membolehkan pembangun membina aplikasi web yang kompleks dengan cepat. Salah satu ciri yang sangat penting ialah suntikan kebergantungan (Dependency Injection), yang membolehkan kami mengurus kebergantungan antara kelas dengan lebih fleksibel dan menggalakkan kebolehujian dan kebolehselenggaraan kod.

Artikel ini akan memberikan pengenalan terperinci kepada suntikan kebergantungan dalam rangka kerja Kajona, termasuk cara mentakrifkan perkhidmatan (Perkhidmatan), cara menyuntik kebergantungan (Dependency), cara menggunakan bekas (Container), dsb.

1. Tentukan perkhidmatan

Dalam rangka kerja Kajona, perkhidmatan merujuk kepada kelas atau objek boleh guna semula yang biasanya bergantung pada berbilang komponen. Apabila mentakrifkan perkhidmatan, anda perlu memberikan nama kelas perkhidmatan dan nilai parameter pembina. Sebagai contoh, kita boleh mentakrifkan perkhidmatan bernama "UserService", yang digunakan untuk mengurus maklumat pengguna dan memerlukan objek sambungan pangkalan data bernama "db" sebagai parameter pembina.

Terdapat dua cara untuk mentakrifkan perkhidmatan: satu ditakrifkan dalam fail konfigurasi dan satu lagi ditakrifkan dalam kod. Mereka diperkenalkan secara berasingan di bawah.

1. Tentukan dalam fail konfigurasi

Dalam rangka kerja Kajona, fail XML biasanya digunakan untuk konfigurasi. Anda boleh menambah kod berikut pada fail konfigurasi untuk mentakrifkan perkhidmatan:

<service id="UserService" class="ppservicesUserService">
   <argument type="service" id="Database"/>
</service>
Salin selepas log masuk

Antaranya, atribut id ialah nama perkhidmatan, atribut kelas ialah nama kelas yang sepadan dengan perkhidmatan dan hujah tag digunakan untuk mentakrifkan parameter pembina Atribut jenis boleh menjadi "perkhidmatan" (merujuk kepada perkhidmatan lain) atau "nilai" (melalui nilai parameter secara langsung), dan atribut id ialah nama atau nilai parameter perkhidmatan yang dirujuk.

Dalam contoh di atas, kami menentukan perkhidmatan bernama "UserService", dan kelas yang sepadan ialah "ppservicesUserService". Pembina memerlukan perkhidmatan bernama "Pangkalan Data" sebagai parameter, yang mewakili objek sambungan pangkalan data.

2. Tentukan dalam kod

Selain mentakrifkan perkhidmatan dalam fail konfigurasi, ia juga boleh ditakrifkan melalui kod. Sebagai contoh, kami boleh mentakrifkan perkhidmatan "UserService" dalam fail "app.php":

$app->register('UserService', function($app){
   $db = $app->make('Database');
   return new ppservicesUserService($db);
});
Salin selepas log masuk

Dalam kod di atas, kami mula-mula memanggil fungsi $app->register() untuk mendaftarkan perkhidmatan. Parameter pertama fungsi ini ialah nama perkhidmatan, dan parameter kedua ialah fungsi tanpa nama yang digunakan untuk menjana contoh perkhidmatan. Fungsi ini menerima objek $app sebagai parameter dan boleh memanggil kaedah $app->make() untuk mendapatkan perkhidmatan lain. Akhir sekali, kami mengembalikan objek UserService baharu dan lulus $db sebagai parameter pembina.

2. Inject dependencies

Dalam rangka kerja Kajona, biasanya terdapat dua cara untuk menyuntik dependensi: suntikan pembina dan suntikan atribut, yang diperkenalkan di bawah.

1. Suntikan konstruktor

Suntikan konstruktor merujuk kepada menghantar objek bergantung melalui pembina semasa mencipta objek. Sebagai contoh, kami boleh menyuntik perkhidmatan "Pangkalan Data" yang diperlukan oleh "UserService" melalui pembina:

class UserService {
   private $db;
   public function __construct(Database $db){
      $this->db = $db;
   }
}
Salin selepas log masuk

Dalam kod di atas, kami menerima objek Pangkalan Data dalam pembina UserService dan menetapkannya kepada Pembolehubah peribadi $db . Dengan cara ini, objek $db menjadi pembolehubah ahli UserService dan boleh digunakan dalam kaedah lain dalam kelas ini.

Apabila mencipta objek UserService, kami perlu menyediakan objek Pangkalan Data, seperti yang ditunjukkan di bawah:

$userService = $app->make('UserService');
Salin selepas log masuk
Salin selepas log masuk

Rangka kerja Kajona akan menghuraikan secara automatik pembina kelas UserService dan mencipta satu melalui "Pangkalan Data " perkhidmatan objek baharu. Oleh itu, kami tidak perlu mencipta objek Pangkalan Data secara manual, dan kami juga tidak perlu risau tentang susunan penciptaan diuruskan secara automatik oleh rangka kerja.

2. Suntikan atribut

Suntikan atribut merujuk kepada menyuntik objek bergantung melalui kaedah Setter selepas mencipta objek. Sebagai contoh, kita boleh mentakrifkan kaedah setDatabase() dalam kelas UserService untuk menyuntik objek Pangkalan Data:

class UserService {
   private $db;
   public function setDatabase(Database $db){
      $this->db = $db;
   }
}
Salin selepas log masuk

Apabila menggunakan suntikan atribut, kita perlu mencipta objek UserService dahulu dan kemudian menyuntik Pangkalan Data melalui setDatabase( ) kaedah Objek:

$userService = $app->make('UserService');
$userService->setDatabase($app->make('Database'));
Salin selepas log masuk

Ambil perhatian bahawa apabila menggunakan suntikan atribut, anda perlu memanggil kaedah yang ditetapkan secara manual untuk menyuntik objek bergantung, jika tidak ralat Null akan berlaku apabila menggunakan objek UserService.

3. Menggunakan bekas

Dalam rangka kerja Kajona, bekas (Bekas) ialah konsep penting, yang digunakan untuk mengurus kejadian dan kebergantungan perkhidmatan. Bekas secara automatik menyelesaikan kebergantungan antara perkhidmatan dan menjadikan objek perkhidmatan seperti yang diperlukan.

Dalam rangka kerja Kajona, bekas boleh diakses melalui objek $app. Sebagai contoh, kita boleh menggunakan kaedah $app->make() untuk mendapatkan contoh perkhidmatan:

$userService = $app->make('UserService');
Salin selepas log masuk
Salin selepas log masuk

Kaedah ini akan mencari perkhidmatan bernama "UserService" dalam bekas dan mengembalikan objek UserService baharu.

Selain kaedah $app->make(), terdapat kaedah lain untuk mengakses bekas, seperti:

• $app->has($id), untuk Periksa sama ada terdapat perkhidmatan yang dinyatakan dalam bekas itu; , $concrete), Digunakan untuk mengikat contoh tertentu kepada perkhidmatan tertentu dalam bekas.

Ringkasan

Suntikan kebergantungan ialah corak reka bentuk yang sangat penting Mekanisme suntikan kebergantungan dilaksanakan dalam rangka kerja Kajona, yang sangat mengurangkan gandingan antara sistem dan meningkatkan kebolehskalaan dan kebolehujian kod. Artikel ini memperkenalkan secara terperinci cara mentakrifkan perkhidmatan, menyuntik kebergantungan dan menggunakan bekas dalam rangka kerja Kajona, dengan harapan dapat membantu pembangun.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan suntikan pergantungan dalam rangka kerja Kajona?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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