PHP में डिपेंडेंसी इंजेक्शन: उदाहरणों के साथ पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

PHP में डिपेंडेंसी इंजेक्शन का परिचय



PHP में आधुनिक विकास ऑब्जेक्ट-ओरिएंटेड डिज़ाइन सिद्धांतों के बिना अकल्पनीय है। एक प्रमुख पैटर्न जो लचीले, परीक्षण योग्य और रखरखाव योग्य एप्लिकेशन बनाने की अनुमति देता है, वह है डिपेंडेंसी इंजेक्शन (DI) या निर्भरता इंजेक्शन।



पैटर्न का सार सरल है: क्लास के अंदर आश्रित ऑब्जेक्ट बनाने के बजाय, हम उन्हें बाहर से पास (इंजेक्ट) करते हैं। यह एप्लिकेशन की आर्किटेक्चर को मौलिक रूप से बदल देता है, क्लासेस को विशिष्ट कार्यान्वयन से स्वतंत्र बनाता है और उनके परीक्षण को सरल बनाता है।



इस लेख में, हम समझेंगे कि PHP में डिपेंडेंसी इंजेक्शन क्या है, इसे लागू करने के कौन से तरीके मौजूद हैं, और प्रक्रिया को स्वचालित करने के लिए DI-कंटेनर का उपयोग कैसे करें।



समस्या: DI के बिना खराब क्यों है?



एक विशिष्ट उदाहरण पर विचार करें। क्लास UserController उपयोगकर्ताओं से संबंधित अनुरोधों को संसाधित करने के लिए जिम्मेदार है। यह क्लास MysqlDatabase के माध्यम से डेटाबेस का उपयोग करता है:



<?php

class MysqlDatabase { public function query(string $sql): array { // ... MySQL से कनेक्शन और क्वेरी निष्पादन return []; }}

class UserController { private MysqlDatabase $database;

public function __construct() { // विशिष्ट कार्यान्वयन से कठोर जुड़ाव $this->database = new MysqlDatabase(); }

public function listUsers(): array { return $this->database->query('SELECT * FROM users'); }}

$controller = new UserController();


इस कोड की समस्याएं क्या हैं?



  • मजबूत युग्मन: UserController MysqlDatabase से कठोरता से जुड़ा हुआ है। यदि हम PostgreSQL पर स्विच करना चाहते हैं या फ़ाइल स्टोरेज का उपयोग करना चाहते हैं, तो हमें कंट्रोलर का कोड बदलना होगा।
  • परीक्षण में कठिनाई: आप यूनिट टेस्ट में डेटाबेस को मॉक ऑब्जेक्ट से प्रतिस्थापित नहीं कर सकते। प्रत्येक परीक्षण वास्तविक डेटाबेस तक पहुंचेगा, जो धीमा और असुविधाजनक है।
  • एकल जिम्मेदारी सिद्धांत का उल्लंघन: कंट्रोलर को यह नहीं जानना चाहिए कि डेटाबेस कनेक्शन कैसे बनाया जाए। इसका काम अनुरोधों को संसाधित करना है।


इस समस्या का समाधान नियंत्रण के उलटा (IoC) सिद्धांत को लागू करना और डिपेंडेंसी इंजेक्शन का उपयोग करना है।



PHP में निर्भरता इंजेक्शन के तरीके



क्लास में निर्भरता इंजेक्ट करने के तीन मुख्य तरीके हैं:



1. कंस्ट्रक्टर के माध्यम से इंजेक्शन (Constructor Injection)



सबसे सामान्य और अनुशंसित तरीका। निर्भरता कंस्ट्रक्टर पैरामीटर के माध्यम से पास की जाती है और आमतौर पर क्लास की प्राइवेट प्रॉपर्टी के रूप में संग्रहीत की जाती है।



<?php

interface DatabaseInterface { public function query(string $sql): array;}

class MysqlDatabase implements DatabaseInterface { public function query(string $sql): array { // MySQL के लिए कार्यान्वयन return []; }}

class PostgresDatabase implements DatabaseInterface { public function query(string $sql): array { // PostgreSQL के लिए कार्यान्वयन return []; }}

class UserController { private DatabaseInterface $database;

// निर्भरता कंस्ट्रक्टर के माध्यम से इंजेक्ट की जाती है public function __construct(DatabaseInterface $database) { $this->database = $database; }

public function listUsers(): array { return $this->database->query('SELECT * FROM users'); }}

// उपयोग$mysqlDb = new MysqlDatabase();$controller = new UserController($mysqlDb);

// आसानी से दूसरे DB पर स्विच करें$postgresDb = new PostgresDatabase();$controller2 = new UserController($postgresDb);


लाभ: निर्भरता स्पष्ट रूप से दिखाई देती है, ऑब्जेक्ट वैध स्थिति में बनाया जाता है (निर्भरता अनिवार्य है)।



2. सेटर के माध्यम से इंजेक्शन (Setter Injection)



वैकल्पिक निर्भरता या जब निर्भरता

ब्लॉग

पुस्तक अनुशंसाएँ