2010-12-28 31 views
15
class theClass{ 
     function doSomeWork($var){ 
      return ($var + 2); 
     } 

     public $func = "doSomeWork"; 

     function theFunc($min, $max){ 
      return (array_map(WHAT_TO_WRITE_HERE, range($min, $max))); 
     } 
    } 

$theClass = new theClass; 
print_r(call_user_func_array(array($theClass, "theFunc"), array(1, 5))); 
exit; 

किसी भी एक बता सकते हैं कि मैं WHAT_TO_WRITE_HERE पर लिख सकते हैं, ताकि doSomeWork समारोह पाने के लिए पहले के रूप में array_map पैरामीटर गुजरती हैं। और कोड ठीक से काम करते हैं।पासिंग वस्तु विधि()

और

Array 
(
    [0] => 3 
    [1] => 4 
    [2] => 5 
    [3] => 6 
    [4] => 7 
) 
+0

अगर आप सिर्फ वहाँ समारोह नाम लिखा काम करना चाहिए, "doSomeWork " –

+1

' सरणी ($ यह, $ this-> func) 'काम करेगा, जब किसी ऑब्जेक्ट को पास करने के लिए आपको उस सरणी में गुजरने की आवश्यकता होती है जहां पहला तर्क ऑब्जेक्ट होता है और दूसरा उस ऑब्जेक्ट' सरणी (ऑब्जेक्ट ' [], फ़ंक्शन]) ' – RobertPitt

उत्तर

27

के रूप में डाल array_map() के साथ वस्तु तरीकों का उपयोग करने के लिए बाहर देने, वस्तु दृष्टान्त और विधि नाम युक्त एक सरणी गुजरती हैं। समान ऑब्जेक्ट स्कोप के लिए, सामान्य के रूप में $this का उपयोग करें। चूंकि आपकी विधि का नाम आपकी public $func संपत्ति में परिभाषित किया गया है, इसलिए आप $this->func पास कर सकते हैं। यह उन कार्यों पर लागू होता है जो callback को तर्क के रूप में स्वीकार करते हैं।

एक साइड नोट के रूप में, array_map() के बाहर कोष्ठक आवश्यक नहीं हैं।

return array_map(array($this, $this->func), range($min, $max)); 
+13

मुझे नहीं पता था कि _this_ वाक्यविन्यास भी काम करता है। लेकिन, चूंकि आपने कहा "फ़ंक्शन ** नाम **", एक विकल्प 'array_map (सरणी ($ यह,' func ') है, रेंज ($ मिनट, $ अधिकतम))। – nevvermind

+0

@nush: मैं स्ट्रिंग '" doSomeWork "स्ट्रिंग में फ़ंक्शन नाम का जिक्र कर रहा था, न कि संपत्ति '$ func'' का नाम। – BoltClock

+1

आप सही हैं। मैंने कोड पर ध्यान नहीं दिया। पीएस: वह मैं बहुत जल्दी जवाब था। चीयर्स। – nevvermind

1

निम्न कोड एक $users सरणी जो एक getEmail विधि के साथ एक वर्ग के उदाहरण हों, से ईमेल की एक सरणी प्रदान करता है:

if(count($users) < 1) { 
     return $users; // empty array 
    } 
    return array_map(array($users[0], "getEmail"), $users); 
संबंधित मुद्दे