PHP

2012-02-19 3 views
17

में निर्भरता इंजेक्शन ढांचे की तरह गुइस PHP में कोई गुइस या समान निर्भरता इंजेक्शन ढांचे हैं? यदि PHP में कोई अच्छा निर्भरता इंजेक्शन ढांचे नहीं हैं?PHP

मुझे जावा में एक ही कोड को लागू करना है जो मैंने जावा में लागू किया है और मैं अपने जावा प्रोजेक्ट में गुइस का उपयोग करता हूं। इसलिए PHP संस्करण को कार्यान्वित करना आसान होगा, अगर यह समान ढांचे का उपयोग करता है।

+0

यह सवाल http://stackoverflow.com/questions/52072/inversion-of-control-container-for-php –

उत्तर

9

(पोस्ट करना एक प्रतिक्रिया के रूप में मेरी टिप्पणी)

Guice की मेरी क्लोन पर एक नजर डालें नामित Sharbat (रस का मतलब है)। एपीआई गुइस के समान ही है।

यह बहुत ज्यादा सब कुछ आप की जरूरत है:

  • निर्माता इंजेक्शन (@Inject एनोटेशन आवश्यकता नहीं है)
  • फील्ड इंजेक्शन (दृश्यता की परवाह किए बिना, का उपयोग कर @Inject (FooBar))
  • विधि इंजेक्शन (दृश्यता के बावजूद, @ इंजेक्शन एनोटेशन की आवश्यकता है)
  • प्रदाता इंजेक्शन (@InjectProvider (टी = FooBar) के माध्यम से खेतों, @Provider के माध्यम से विधि (टी = FooBar, परम = fooBarProvider) के लिए के लिए
  • कार्यक्षेत्र (एक कस्टम)
  • AOP (विधि इंटरसेप्टर लागू करने के लिए संभव)
  • सर्कुलर निर्भरता

उदाहरण के उपयोग के लिए रीडमी फ़ाइल देखें।

+0

शारबाट के README.md से: "TODO: दस्तावेज़ीकरण और यूनिट-परीक्षण" - उन महत्वपूर्ण चीजों की तरह जो उन्होंने छोड़ी है ... अंतिम अपडेट का उल्लेख नहीं करना 04/2012 ... –

5

मुझे हल्के वजन Aura.Di पसंद है। लिंक किए गए जिथब प्रोजेक्ट पेज में रीडमे आपको कुछ मिनटों में शुरू करने के लिए पर्याप्त जानकारी देता है। यह हालांकि 5.3 पर निर्भर है।

मुझे नहीं लगता कि गुइस के एनोटेशन का उपयोग PHP में रनटाइम में बहुत भारी प्रदर्शन प्रभाव के बिना लागू किया जा सकता है, यदि यह आपका प्राथमिक अनुरोध है।

+0

पर जवाब एनोटेशन docblocks के माध्यम से समर्थन कर रहे हैं - बहुत समय पहले सिर्फ जावा (xdoclets) में की तरह। सिद्धांत के लिए उनके पास समर्थन है (http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/basic-mapping.html) –

+0

मैं एनोटेशन का उपयोग करके एक परियोजना के बारे में नहीं सोच सकता रनटाइम में, बस डॉक्ब्लॉक्स के बारे में सोचा जो अत्यधिक तेज़ होने की आवश्यकता नहीं है। आपके उदाहरण के लिए धन्यवाद लेकिन मैं (मूर्खतापूर्ण और इसे वापस करने के लिए डेटा के साथ नहीं) अभी भी मानना ​​है कि यह गैर संकलित उपयोग के लिए एक प्रदर्शन हिट हो सकता है। – chelmertz

+0

हां, यही कारण है कि आपको इन आंकड़ों को उत्पादन में कैश करना चाहिए। –

3

मैं आपको pimple की सिफारिश करना चाहता हूं। इसका उपयोग करना बहुत आसान है।
इस निर्भरता इंजेक्शन कंटेनर के बारे में दिलचस्प presentation है (इस प्रस्तुति का लेखक मुर्गी का निर्माता है)।

+0

+1 से स्लाइड के लिए +1 fabien –

+0

मैंने पिंपल का उपयोग शुरू किया क्योंकि यह PHP में डीआईसी के साथ शुरू करने का एक अच्छा तरीका प्रतीत होता है ... इसके साथ लगभग एक सप्ताह बाद, मैं इस निष्कर्ष पर पहुंचा हूं कि पिंपल वास्तविक निर्भरता इंजेक्शन की तुलना में कहीं अधिक सेवा लोकेटर है कंटेनर, चूंकि आप जिस सेवा के साथ पंजीकरण करते हैं उसे हाथ से तारित किया जाना चाहिए ... –

3

यहाँ सूची में जोड़ने के लिए एक और निर्भरता रूपरेखा है: PHP-DI

यह विन्यास पर एक कंटेनर बहुत उपयोग करने के लिए व्यावहारिक होना, इन नियमों का पालन (ताकि आप अंत दूसरे के साथ बहुत से भी कम विन्यास लेखन है कंटेनर)।

class Foo { 
    /** 
    * @Inject 
    * @var Bar 
    */ 
    private $bar; 

    public function hello() { 
     return $this->bar->sayHello(); 
    } 
} 

पता है कि एनोटेशन हालांकि वैकल्पिक हैं रहो, अगर आप इसे आप का उपयोग करने की जरूरत नहीं पसंद नहीं है:

यह एनोटेशन के माध्यम से निर्भरता इंजेक्शन (जो वैकल्पिक है) और न्यूनतम विन्यास सुविधाएँ यह।

इसका उपयोग करना बहुत आसान है, और यह ज़ेंड फ्रेमवर्क और सिम्फनी के साथ बहुत अच्छी तरह से एकीकृत है।

(अस्वीकरण: मैं इस ढांचे पर काम करते हैं)

+0

आपका PHP-DI 4 बिल्कुल अद्भुत है! क्या आप योगदान दे सकते हैं: http://stackoverflow.com/questions/24076299/circular- निर्भरता- इंजेक्शन-objects-that-are- प्रत्यक्ष रूप से- depended-on-each-other –

+0

@IliaRostovtsev धन्यवाद :) –

2

चेक बाहर

rg \ injektor PHP के लिए एक परिष्कृत निर्भरता इंजेक्शन कंटेनर कि से प्रेरित था है Guice। अन्य प्रतिबिंब आधारित कंटेनरों के विपरीत आरजी \ इंजेक्टर में एक फैक्ट्री क्लास जनरेटर शामिल है जिसका उपयोग आप उत्पादन पर प्रतिबिंब के उपयोग को रोकने के लिए कर सकते हैं।

इसमें कंस्ट्रक्टर इंजेक्शन, प्रॉपर्टी इंजेक्शन, प्रदाता क्लासेस, ऑब्जेक्ट मैनेजमेंट, नामांकित इंजेक्शन और कुछ और चीजें हैं। यह यूनिट-परीक्षण और संगीतकार के माध्यम से उपलब्ध है।

संबंधित मुद्दे