जब आप उस पर एक सुरक्षित या निजी विधि कॉल करने का प्रयास करते हैं तो यह असफल हो जाएगा, क्योंकि इसका उपयोग बाहरी तरीके से कॉल करने के रूप में किया जाता है। 5.3 में इससे बचने के लिए जहाँ तक मुझे पता है, लेकिन आने पीएचपी 5.4 कोई तरीका नहीं है, यह उम्मीद के रूप में काम करेंगे, बॉक्स से बाहर:
class Hello {
private $message = "Hello world\n";
public function createClosure() {
return function() {
echo $this->message;
};
}
}
$hello = new Hello();
$helloPrinter = $hello->createClosure();
$helloPrinter(); // outputs "Hello world"
इससे भी अधिक, तुम क्या $ बदलने के लिए सक्षम हो जाएगा इस क्रम में करने के लिए बताते हैं, Anonymus कार्य (बंद rebinding) के लिए:
class Hello {
private $message = "Hello world\n";
public function createClosure() {
return function() {
echo $this->message;
};
}
}
class Bye {
private $message = "Bye world\n";
}
$hello = new Hello();
$helloPrinter = $hello->createClosure();
$bye = new Bye();
$byePrinter = $helloPrinter->bindTo($bye, $bye);
$byePrinter(); // outputs "Bye world"
प्रभावी ढंग से, Anonymus कार्यों एक bindTo() method है, जिसकी पहली पैरामीटर क्या करने के लिए इस अंक $ निर्दिष्ट करने के लिए इस्तेमाल किया जा सकता है, और दूसरा पैरामीटर नियंत्रण होगा दृश्यता स्तर क्या होना चाहिए। यदि आप दूसरा पैरामीटर छोड़ देते हैं, तो दृश्यता "बाहरी" से कॉल करने की तरह होगी, उदाहरण के लिए। केवल सार्वजनिक संपत्तियों का उपयोग किया जा सकता है। यह भी ध्यान दें कि बाइंडो काम करता है, यह मूल फ़ंक्शन को संशोधित नहीं करता है, यह एक नया देता है।
स्रोत
2011-12-05 20:10:51
बस एक छोटी सी मंच सम्मेलन - यह आमतौर पर एक प्रश्न अपना पसंदीदा जवाब प्रतिबिंबित करने के लिए संपादित करने के लिए की तुलना में एक जवाब स्वीकार करने के लिए बेहतर है। मुख्य रूप से ऐसा इसलिए होता है कि प्रतिक्रियाएं हमेशा शाश्वतता में समझ में आती हैं, बल्कि सही उत्तर के लिए क्रेडिट देने के लिए भी। – halfer
सावधान रहें कि '$ सीआई = $ यह;' और '$ सीआई = और $ यह; ** ** वास्तव में समान नहीं हैं। शायद आपके उद्देश्यों के लिए, लेकिन वे वही नहीं हैं। '$ सीआई = 'ब्लै' का प्रयास करें; var_dump ($ यह); 'दोनों संस्करणों के साथ अंतर देखने के लिए। – Rudie
@ रुडी मैं आपकी टिप्पणी के लिए [प्रलेखन] (http://php.net/manual/en/language.oop5.references.php) जोड़ रहा हूं – steampowered