6.9 PSR-11 Container Interface¶
PSR-11 atau Container Interface adalah antarmuka yang mengatur cara pengelolaan dan pemanggilan dependensi di dalam aplikasi PHP. Sebuah container dependensi berfungsi untuk menyimpan objek-objek dan menangani pembuatan instansinya. PSR-11 menetapkan aturan bagi container agar objek dapat diambil melalui nama atau alias dan juga menangani lifecycle objek, seperti apakah objek harus selalu dibuat baru atau berbagi instansi yang sama.
PSR-11 menyediakan dua metode utama:
- get(): untuk mendapatkan objek dari container.
- has(): untuk memeriksa apakah objek tersedia dalam container.
6.9.1 Cara Implementasi¶
Untuk menggunakan PSR-11, diperlukan implementasi container yang mendukung standar ini. Salah satu container yang umum digunakan adalah PHP-DI. Instal library PHP-DI menggunakan Composer:
Berikut adalah langkah-langkah penggunaan PSR-11 pada aplikasi PHP:
-
Membuat kelas yang akan dikelola oleh Container
Misalnya: terdapat dua kelas yaitu
DatabaseConnection
danUserService
. KelasUserService
membutuhkan objekDatabaseConnection
sebagai dependensinya. Berikut sebagai contohnya:Kelas DatabaseConnection
Kelas UserService
<?php class UserService { private $databaseConnection; // Menyuntikkan dependensi DatabaseConnection melalui konstruktor public function __construct(DatabaseConnection $databaseConnection) { $this->databaseConnection = $databaseConnection; } public function getUser() { return "Pengguna data, " . $this->databaseConnection->connect(); } }
-
Mengkonfigurasi Container
Dalam hal ini,
ContainerBuilder
digunakan untuk membuat container yang akan menyimpan objek-objek dan dependensinya.<?php require 'vendor/autoload.php'; use DI\ContainerBuilder; // Membuat dan mengonfigurasi container $containerBuilder = new ContainerBuilder(); $container = $containerBuilder->build(); // Menambahkan objek DatabaseConnection ke dalam container $container->set(DatabaseConnection::class, DI\create(DatabaseConnection::class)); // Menambahkan objek UserService dengan dependency injection $container->set(UserService::class, DI\create(UserService::class)->constructor(DI\get(DatabaseConnection::class)));
-
Mengambil dan menggunakan objek dari Container
Saat ini, objek
UserService
dapat diambil dari container. Container akan secara otomatis menangani injeksi dependensi (dalam hal iniDatabaseConnection
).
Penjelasan Kode
- ContainerBuilder: digunakan untuk membuat container. Container ini menyimpan semua dependensi yang dibutuhkan oleh aplikasi.
- set(): menambahkan objek ke dalam container. Dalam contoh ini, objek
DatabaseConnection
danUserService
ditambahkan. - get(): mengambil objek dari container. Saat mengambil objek
UserService
, container juga secara otomatis menyuntikkan objekDatabaseConnection
ke dalamnya. - constructor(): digunakan untuk menyuntikkan dependensi ke dalam konstruktor objek
UserService
.
Berikut adalah hasil yang diperoleh setelah menjalankan kode di atas:
6.9.2 Keuntungan¶
-
Modularitas
PSR-11 memungkinkan mengelola dan memisahkan dependensi dalam aplikasi, sehingga aplikasi lebih modular.
-
Interoperabilitas
Aplikasi dapat dengan mudah berintegrasi dengan berbagai library dan framework yang mendukung PSR-11.
-
Dependency Injection
PSR-11 mendukung pola dependency injection, yang memungkinkan pengelolaan objek lebih fleksibel dan mudah diuji.