2011-03-04 12 views
33

मेरे पास मेरी ऑब्जेक्ट्स में से एक में एक रिकर्सिव लैम्ब्डा फ़ंक्शन है, और इसे ऑब्जेक्ट के mysqli कनेक्शन तक पहुंचने की आवश्यकता है। यह प्रयासलैम्बडा फ़ंक्शंस से मूल ऑब्जेक्ट तक कैसे पहुंचे?

$recfunc = function($id, $name) use($this) { 

एक अनुचित गंभीर त्रुटि

Fatal error: Cannot use $this as lexical variable in C:\Users\Codemonkey1991\Desktop\workspace\melior\objects\databasemanager.php on line 88

किसी को भी मुझे कुछ संकेत दे सकता है उत्पादित?


संपादित करें: संदर्भ को स्पष्ट करने के लिए, मैं इस लैम्ब्डा फ़ंक्शन को किसी अन्य फ़ंक्शन के अंदर बनाने की कोशिश कर रहा हूं। $this के संदर्भ में स्पष्ट रूप से लैम्ब्डा समारोह को पास करने की जरूरत नहीं है

$host = $this; 
$recfunc = function($id, $name) use ($host) { ... 

उत्तर

50

क्योंकि बंद खुद को वस्तुओं रहे हैं, तो आप एक स्थानीय चर के लिए $this आवंटित करने के लिए, की जरूरत है की तरह।

class Foo { 
    public $var = ''; 

    public function bar() { 
     $func = function() { 
      echo $this->var; 
     }; 
     $func(); 
    } 
} 

$foo = new Foo(); 
$foo->var = 'It works!'; 
$foo->bar(); // will echo 'It works!' 
+1

अरे, बस एक अतिरिक्त प्रश्न: मैं फ़ंक्शन को कॉल करने के बारे में कैसे जाउंगा? – Hubro

+4

'$ recfunc = फ़ंक्शन ($ आईडी, $ नाम) उपयोग ($ होस्ट, और $ recfunc) {if (FOO) $ recfunc ($ id, $ name) लौटाएं; } ' –

+3

इस त्रुटि पर bugs.php.net रिपोर्ट की जांच करने से, यह सुविधा PHP 5.4 में जोड़ा गया है। –

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