2010-08-11 9 views
15

यदि मैं PHP कक्षा में __call विधि को अधिभारित कर रहा हूं, तो मेरा कोड कुछ और नहीं करता है तो मैं वास्तविक विधि कैसे कॉल कर सकता हूं? उदाहरण के लिए:PHP माता-पिता को कैसे कॉल करें :: __ कॉल() और तर्कों में पास करें

public function __call($name, $arguments) 
{ 
    if($name == 'tom') 
    { 
     $this->doName($name); 
    } 
    else 
    { 
     // Something here to carry on the __call maybe: 
     // $this->$name($arguments); 
    } 
} 

मुद्दा यह है कि $arguments एक सरणी के रूप में के माध्यम से पारित कर रहे हैं, मैं जानकारी $this->$name($arg, $arg, $arg ...) के माध्यम से उन्हें पारित करने के लिए कैसे जारी रख सकता वहाँ यह करने के लिए एक सही तरीका है?

उत्तर

18

आप कॉल कर सकते हैं:

return parent::__call($name, $arguments); 

या मैं गलत समझ रहा हूँ कि तुम क्या कह रहे हैं?

संपादित करें:

और अगर आप मतलब है कि आप parent::__call() को गति प्रदान करने के लिए प्रयास करने के लिए $this->$name() कॉल करना चाहते हैं, यह काम नहीं करेगा। जब तक स्टैक ओवरफ़्लोज़ और PHP क्रैश नहीं हो जाते हैं (दूसरे शब्दों में, यह खराब है) ...

+0

हे! पूरी तरह से कभी सोचा नहीं! : डी – tarnfeld

6

आप इस का उपयोग कर सकते हैं:

call_user_func_array("self::method", $parameters) 
+0

उदाहरण के लिए धन्यवाद, मुझे php.net पर जाना नहीं था :) – Marecky

+0

आपको बहुत धन्यवाद –

+0

यह स्थिर तरीकों पर काम करेगा .... – igaster

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