PHP-DI का परिचय: यह क्या है और क्यों ज़रूरी है
PHP-DI (PHP Dependency Injection) PHP एप्लिकेशन में डिपेंडेंसी इंजेक्शन (DI) के लिए एक शक्तिशाली लाइब्रेरी है। यह Inversion of Control (IoC) पैटर्न को लागू करती है और क्लासेस के बीच डिपेंडेंसी को स्वचालित रूप से हल करने के लिए एक कंटेनर प्रदान करती है।
PHP-DI की ज़रूरत क्यों है? आधुनिक PHP प्रोजेक्ट्स (खासकर Laravel, Symfony, Slim जैसे फ्रेमवर्क) में क्लासेस अक्सर दूसरी क्लासेस पर निर्भर होती हैं। DI कंटेनर के बिना, आपको सभी डिपेंडेंसी मैन्युअली बनानी पड़ती हैं — जिससे ये समस्याएं होती हैं:
- कोड का टाइट कपलिंग (tight coupling)
- टेस्टिंग में कठिनाई
- ऑब्जेक्ट बनाते समय कोड का दोहराव
- मेंटेनेंस और एक्सटेंशन में मुश्किलें
PHP-DI इन समस्याओं को हल करती है, स्वचालित रूप से यह पहचान कर कि आपके कोड को किन क्लासेस की ज़रूरत है, और उन्हें सही डिपेंडेंसी के साथ बनाती है। यह लाइब्रेरी सपोर्ट करती है:
- कंस्ट्रक्टर के माध्यम से ऑटोमैटिक इंजेक्शन
- एनोटेशन (phpDoc) के ज़रिए डिपेंडेंसी परिभाषित करना
- ऐरे, YAML या PHP फ़ाइलों के माध्यम से कॉन्फ़िगरेशन
- लेज़ी लोडिंग (lazy loading)
- लोकप्रिय फ्रेमवर्क के साथ इंटीग्रेशन
PHP-DI की इंस्टॉलेशन
PHP-DI को Composer के माध्यम से इंस्टॉल किया जाता है — PHP के लिए मानक पैकेज मैनेजर:
composer require php-di/php-di
अगर आप Slim फ्रेमवर्क का उपयोग कर रहे हैं, तो इंटीग्रेशन पैकेज इंस्टॉल करें:
composer require php-di/slim-bridge
Symfony के लिए एक अलग पैकेज है:
composer require php-di/symfony-bridge
इंस्टॉलेशन के बाद, अपने प्रोजेक्ट में Composer ऑटोलोडर को शामिल करें:
require __DIR__ . '/vendor/autoload.php';
कोड उदाहरण के साथ त्वरित शुरुआत
PHP-DI का एक सरल उदाहरण देखते हैं। मान लीजिए हमारे पास एक Mailer क्लास है जो Logger क्लास पर निर्भर है:
<?php
// Logger क्लास
class Logger {
public function log($message) {
echo "[LOG]: " . $message . "\n";
}
}
// Mailer क्लास जो Logger पर निर्भर है
class Mailer {
private $logger;
public function __construct(Logger $logger) {
$this->logger = $logger;
}
public function send($to, $subject) {
$this->logger->log("{$to} को ईमेल भेजा जा रहा है: {$subject}");
// भेजने की लॉजिक...
}
}
// DI कंटेनर बनाएं
$container = new DI\Container();
// Mailer ऑब्जेक्ट प्राप्त करें — सभी डिपेंडेंसी ऑटोमैटिकली हल हो जाती हैं
$mailer = $container->get('Mailer');
$mailer->send('user@example.com', 'नमस्ते!');
?>
इस उदाहरण में, PHP-DI स्वचालित रूप से Logger का एक इंस्टेंस बनाता है और इसे Mailer के कंस्ट्रक्टर में भेजता है। आपको new Logger() लिखने की ज़रूरत नहीं है — कंटेनर यह आपके लिए करता है।
PHP-DI के मुख्य तरीके और फंक्शन
1. Container::get() — कंटेनर से ऑब्जेक्ट प्राप्त करना
यह क्या करता है: कंटेनर से उसके नाम (क्लास, इंटरफ़ेस या उपनाम) के आधार पर ऑब्जेक्ट निकालता है। अगर ऑब्जेक्ट अभी तक नहीं बना है, तो कंटेनर उसे और उसकी सभी डिपेंडेंसी बनाता है।
पैरामीटर:
string $name— क्लास, इंटरफ़ेस या उपनाम का नाम
उदाहरण:
$container = new DI\Container();
$logger = $container->get('Logger'); // Logger ऑब्जेक्ट बनाता और लौटाता है
$mailer = $container->get('Mailer'); // Mailer को Logger के साथ बनाता है
2. Container::set() — डेफिनिशन रजिस्टर करना
यह क्या करता है: क्लास, इंटरफ़ेस या उपनाम के लिए एक डेफिनिशन रजिस्टर करता है। यह बताता है कि ऑब्जेक्ट कैसे बनाया जाना चाहिए।
पैरामीटर:
string $name— क्लास का नाम या उपनामmixed $definition— डेफिनिशन (स्ट्रिंग, ऐरे, क्लोज़र, Definition ऑब्जेक्ट)
उदाहरण:
पुस्तकालय में भी
PHP में डेटा सत्यापन: कोड उदाहरणों के साथ पूर्ण गाइड
Diesel Rust: पूरी गाइड उदाहरणों के साथ
जावा में JSON प्रोसेसिंग: डेटा के साथ काम करने के लिए Jackson और Gson लाइब्रेरीज़
SwiftConfig: Swift में एप्लिकेशन कॉन्फ़िगरेशन प्रबंधन
JavaScript (Node.js) में S3 और क्लाउड स्टोरेज के साथ कार्य — लाइब्रेरी @aws-sdk/client-s3