Bagi developer yang masih terjebak dengan new Class() di setiap baris kode, saatnya untuk berevolusi. Di tengah ekosistem PHP 8.4 yang semakin matang, Dependency Injection (DI) bukan lagi opsi, melainkan kebutuhan krusial untuk menjaga testability dan maintainability. Alih-alih membuat dependensi secara manual di dalam constructor, sebaiknya kita menggunakan Container untuk mengelola siklus hidup objek secara otomatis.
Dependency Injection adalah tentang melepas ketergantungan antar kelas. Jika kelasmu tahu terlalu banyak tentang cara membuat dependensinya, maka kelas tersebut sudah gagal dalam prinsip Single Responsibility.
Untuk mengimplementasikan DI tanpa framework berat seperti Laravel, kita bisa memanfaatkan fitur Reflection API yang tersedia secara native di PHP. Berikut adalah contoh sederhana bagaimana kita melakukan inject service ke dalam controller:
interface LoggerInterface { public function log(string $msg); } class FileLogger implements LoggerInterface { public function log(string $msg) { echo 'Logging to file: ' . $msg; } } class UserController { public function __construct(private LoggerInterface $logger) {} public function createUser() { $this->logger->log('User created successfully'); } }Banyak junior developer langsung meloncat ke Laravel atau Symfony sebelum memahami dasar DI. Padahal, memahami cara kerja Reflection API di PHP memberikan kontrol penuh atas performa aplikasi. Menggunakan Container pihak ketiga memang mempercepat development, namun memahami *under the hood* memungkinkan kita melakukan optimasi yang tidak bisa dilakukan oleh framework generik.
Dependency Injection adalah jembatan menuju kode yang bersih dan profesional. Dengan PHP 8.4, fitur seperti constructor property promotion membuat sintaks DI jauh lebih ringkas. Mulailah mengadopsi pola ini sekarang, karena arsitektur yang kuat adalah investasi jangka panjang bagi kesehatan codebase Anda.