2011-06-13 17 views
9

क्या कोई अज्ञात फ़ंक्शन पर ऑब्जेक्ट संदर्भ पास करने का कोई तरीका है$this को तर्क के रूप में पास किया गया है?किसी अज्ञात फ़ंक्शन पर ऑब्जेक्ट संदर्भ कैसे पास करें?

class Foo { 
    function bar() { 
     $this->baz = 2; 
     # Fatal error: Using $this when not in object context 
     $echo_baz = function() { echo $this->baz; }; 
     $echo_baz(); 
    } 
} 
$f = new Foo(); 
$f->bar(); 

उत्तर

10

आप कुछ चर को $this असाइन कर सकते हैं और फिर use कीवर्ड का उपयोग कार्य करने के लिए, जब समारोह को परिभाषित है, हालांकि मुझे यकीन है कि नहीं कर रहा हूँ अगर यह उपयोग करने के लिए आसान है इस चर पारित करने के लिए।

class Foo { 
    function bar() { 
     $this->baz = 2; 
     $obj = $this; 
     $echo_baz = function() use($obj) { echo $obj->baz; }; 
     $echo_baz(); 
    } 
} 
$f = new Foo(); 
$f->bar(); 

यह ताकि आप निजी और संरक्षित सदस्यों उपयोग करने में सक्षम नहीं होगा, यह देखते हुए कि $obj मानक वस्तु के रूप में देखा जाएगा (बल्कि $this के रूप में की तुलना में) के लायक है: वैसे भी, यहाँ एक उदाहरण है।

+4

नोट: PHP v5.4 अब अज्ञात कार्यों के भीतर '$ this' के उपयोग की अनुमति देता है। – lifo

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