2011-07-21 14 views
6

संभव डुप्लिकेट:
Calling closure assigned to object property directlyबेनामी समारोह

क्यों इस PHP में संभव नहीं है? मैं किसी विशेष वस्तु के लिए फ्लाई पर फ़ंक्शन बनाने में सक्षम होना चाहता हूं।

$a = 'a'; 
$tokenMapper->tokenJoinHistories = function($a) { 
    echo $a; 
}; 
$tokenMapper->tokenJoinHistories($a); 
+0

इस कोड से आपको क्या त्रुटि मिली है? – Nobody

उत्तर

0

$obj->foo() के साथ आप तरीकों फोन है, लेकिन आप एक समारोह/विधि के रूप में एक संपत्ति कॉल करना चाहते हैं। यह सिर्फ पार्सर को भ्रमित करता है, क्योंकि उसे foo() नाम से कोई विधि नहीं मिली, लेकिन वह किसी भी संपत्ति को कुछ कॉल करने योग्य नहीं होने की उम्मीद कर सकता है।

call_user_func($tokenMapper->tokenJoinHistories, $a); 

या आप का विस्तार अपने नक्शाकार तरह

class Bar { 
    public function __call ($name, $args) { 
    if (isset($this->$name) && is_callable($this->$name)) { 
     return call_user_func_array($this->$name, $args); 
    } else { 
     throw new Exception("Undefined method '$name'"); 
    } 
    } 
} 

(वहाँ रहे हैं इस जल्दी से लिखा उदाहरण के भीतर कुछ मुद्दों पर शायद)

2

पीएचपी "tokenJoinHistories" कहा जाता है एक उदाहरण विधि से मेल खाते की कोशिश करता है कि नहीं है मूल वर्ग

आपको परिभाषित करना है

$anon_func = $tokenMapper->tokenJoinHistories; 
$anon_func($a); 

प्रलेखन here विशेष रूप से टिप्पणी भाग पढ़ें।

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