2012-07-21 14 views
5

मैं बंद वर्ग के बारे में समझने की कोशिश कर रहा हूँ, वहाँ के मैनुअल में, मैनुअल Link पर सभी,पीएचपी, बंद वर्ग

बंद :: __ निर्माण - निर्माता कि इन्स्टेन्शियशन अस्वीकार करती है। अगर मैं इसे समझता हूं तो इस वर्ग का एकमात्र उदाहरण अज्ञात फ़ंक्शन वैरिएबल असाइनमेंट के लिए है।

लेकिन मैं समझ में नहीं आया कुछ पंक्तियां:

बंद :: बाँध - एक विशिष्ट बाध्य वस्तु और वर्ग गुंजाइश के साथ एक बंद सम्मिलित हैं।

क्लोजर :: बाइंडो - एक नई बाध्य वस्तु और कक्षा के दायरे के साथ बंद करने को डुप्लिकेट करता है।

और आखिरी के मैनुअल में मैं इस वाक्य समझ में नहीं आया:

यहाँ सूचीबद्ध तरीकों इसके अलावा, इस वर्ग के भी एक __invoke विधि है। यह कॉलिंग जादू को लागू करने वाले अन्य वर्गों के साथ स्थिरता के लिए है, क्योंकि इस विधि का उपयोग फ़ंक्शन को कॉल करने के लिए नहीं किया जाता है।

यदि कोई कृपया मुझे थ्रो लाइनों को समझाने की कोशिश कर सकता है तो मैं बहुत आभारी रहूंगा, आपका दिन शुभ हो।

+0

धन्यवाद सब मैं अब जवाब पढ़ रहा हूं। –

उत्तर

7

यह calling magic का जिक्र कर रहा है।

मेरी समझ के रूप में, __invoke विधि जिसमें किसी भी वर्ग के लिए यह कहा जा सकता है कि यह एक कार्य है। Closure::__invoke इस तरह कार्य करता है।

अर्थात जब $foo वर्ग Closure (अनाम समारोह) की है, बुला $foo($bar)$foo->__invoke(bar) कॉल करेंगे (हालांकि __invoke सदस्य सीधे कहा जा करने के लिए नहीं है, यह कैसे काम करता है दिखाने के लिए सिर्फ है)।

जब आप गुमनाम कार्यों को परिभाषित, आप ऐसा करते हैं:

$greet = function($name) 
{ 
    printf("Hello %s\r\n", $name); 
}; 

अब, $greet वर्ग Closure की है। और $greet->__invokefunction($name){ printf("Hello %s\r\n", $name); }

के बराबर है और याद रखें, Closure::__invokeMagic Method है।

+0

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

3

मुझे लगता है कि bind और bindTo के बीच अंतर को जैसा कहा जाता है में है:

$cl->bindTo($obj) 

Closure::bind($cl, $obj) 

__invoke meethod के बारे में करने के लिए बराबर है, यह कह रहा है कि विधि मौजूद है , लेकिन यह वास्तव में उपयोग नहीं किया जाता है। जब आप एक समारोह के रूप में बंद करने का उपयोग करते हैं, तो एक आंतरिक (शायद अधिक कुशल) तंत्र का उपयोग किया जाता है जो विधि को छोड़ देता है। लेकिन यह तरीका अन्य वर्गों के साथ संगतता के लिए है जो कॉल करने योग्य हैं, और यदि आप चाहें तो इसे मैन्युअल रूप से कॉल कर सकते हैं।

+0

धन्यवाद बर्मर क्या आप कृपया बाध्य और बाध्य करने के बारे में कुछ और विस्तार कर सकते हैं क्योंकि मुझे नहीं पता कि मुझे यह अधिकार मिल गया है कि अगर आप बाइंड की तुलना कर सकते हैं और कृपया किसी कोड से जुड़ सकते हैं। –

+0

[इस] के रूप में (http://www.php.net/manual/en/closure.bind.php) कहता है कि 'यह विधि क्लोजर :: bindTo() का एक स्थिर संस्करण है। –

+0

उदाहरणों को देखें दस्तावेज़ीकरण। मुझे नहीं लगता कि मैं उससे बेहतर कर सकता हूं। वे एक ही चीज़ लिखने के केवल दो अलग-अलग तरीके हैं - बाइंडो ऑब्जेक्ट उन्मुख है, जबकि बाध्य पारंपरिक फ़ंक्शन शैली है। – Barmar

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