Pimple PHP: सरल DI कंटेनर की पूरी गाइड
1. Pimple क्या है और इसकी आवश्यकता क्यों है?
Pimple एक हल्का Dependency Injection Container (DI कंटेनर) है जो PHP के लिए बनाया गया है। इसे Fabien Potencier ने डेवलप किया, जो Symfony Framework के निर्माता हैं। बड़े और जटिल DI कंटेनरों के विपरीत, Pimple एक न्यूनतम समाधान है जिसे आप बिना किसी अतिरिक्त ओवरहेड के किसी भी प्रोजेक्ट में शामिल कर सकते हैं। यह लाइब्रेरी Service Locator पैटर्न को लागू करती है और ऑब्जेक्ट्स और उनकी डिपेंडेंसी को मैनेज करने के लिए एक सरल API प्रदान करती है।
Pimple का मुख्य उद्देश्य PHP एप्लिकेशन में डिपेंडेंसी मैनेजमेंट को आसान बनाना है। new कीवर्ड से मैन्युअल रूप से ऑब्जेक्ट बनाने और उन्हें कंस्ट्रक्टर में पास करने के बजाय, आप कंटेनर में सर्विसेज रजिस्टर करते हैं और फिर उन्हें नाम से एक्सेस करते हैं। कंटेनर ऑटोमैटिकली डिपेंडेंसी को हल करता है, ऑब्जेक्ट्स को एक बार (singleton) या हर बार नया (factory) बनाता है, और उनके लाइफसाइकिल को मैनेज करता है। इससे कोड अधिक मॉड्यूलर, टेस्ट करने योग्य और मेंटेन करने योग्य बनता है।
Pimple छोटे और मध्यम प्रोजेक्ट्स के लिए आदर्श है जहाँ Symfony DI या PHP-DI के पूर्ण फीचर्स की आवश्यकता नहीं है। यह एनोटेशन का उपयोग नहीं करता, जटिल कॉन्फ़िगरेशन की आवश्यकता नहीं है, और PHP 5.3 से काम करता है। यह लाइब्रेरी Silex (माइक्रो-फ्रेमवर्क) और अन्य PHP प्रोजेक्ट्स में सक्रिय रूप से उपयोग की जाती है जहाँ सादगी और गति महत्वपूर्ण है।
2. इंस्टॉलेशन
Pimple को Composer के माध्यम से इंस्टॉल किया जाता है, जो PHP का मानक पैकेज मैनेजर है। टर्मिनल में निम्न कमांड चलाएँ:
composer require pimple/pimple
इंस्टॉलेशन के बाद, अपने PHP फ़ाइल में Composer ऑटोलोडर को शामिल करें:
require_once __DIR__ . '/vendor/autoload.php';
यदि आपके पास अभी तक composer.json नहीं है, तो इसे बनाएँ:
{
"require": {
"pimple/pimple": "^3.5"
}
}
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
index.php नामक फ़ाइल बनाएँ और इसमें निम्न कोड जोड़ें:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Pimple\Container;
// कंटेनर बनाएँ
$container = new Container();
// एक सरल सर्विस परिभाषित करें (क्लोजर)
$container['greeting'] = function ($c) {
return 'Hello, World!';
};
// पैरामीटर के साथ सर्विस परिभाषित करें
$container['personal_greeting'] = function ($c) {
return function ($name) use ($c) {
return 'Hello, ' . $name . '!';
};
};
// सर्विसेज प्राप्त करें
echo $container['greeting'] . "\n"; // Hello, World!
echo $container['personal_greeting']('Alice') . "\n"; // Hello, Alice!
// ऑब्जेक्ट सर्विस परिभाषित करें
class Logger {
public function log($message) {
echo "[LOG] $message\n";
}
}
$container['logger'] = function ($c) {
return new Logger();
};
$container['logger']->log('Application started');
स्क्रिप्ट चलाएँ: php index.php. आप तीन संदेशों का आउटपुट देखेंगे। यह उदाहरण कंटेनर से सर्विसेज को रजिस्टर और प्राप्त करने की मूल प्रक्रिया दिखाता है।
4. मुख्य तरीके और क्लासेज
4.1. Pimple\Container::__construct()
सिग्नेचर: public function __construct(array $values = [])
विवरण: कंटेनर का एक नया इंस्टेंस बनाता है। इसमें पूर्वनिर्धारित वैल्यू/सर्विसेज का ऐरे पास किया जा सकता है।
$container = new Container([
'db.host' => 'localhost',
'db.name' => 'test'
]);
4.2. offsetSet($id, $value) (मैजिक मेथड [] के माध्यम से)
सिग्नेचर: public function offsetSet($id, $value): void
पुस्तकालय में भी
Go (Golang) में Excel के साथ काम करना: Excelize, xlsx, tealeg लाइब्रेरीज़
PyTorch: Meta का गहन शिक्षण फ्रेमवर्क – पूरी जानकारी
C++ में YAML के साथ कार्य: पार्सिंग और सीरियलाइज़ेशन के लिए yaml-cpp लाइब्रेरी
TypeScript में छवियों के साथ कार्य: लाइब्रेरीज़, उपकरण और कोड उदाहरण
Viper Go: पूर्ण गाइड उदाहरणों के साथ