2010-12-11 7 views
5

मैंने अभी खुद को एक ऐसा फ़ंक्शन बनाया है जो यूआरआई स्ट्रिंग लाता है और इसे नीचे दिखाए गए सरणी में बदल देता है। इस उदाहरण http://mydomain.com/mycontroller/mymethod/varPHP: सरणी से कक्षा को कॉल करें?

Array 
(
    [0] => mycontroller 
    [1] => mymethod 
    [2] => var 
) 

अगर मैं लिखना new $myArray[0]; का URL पर आधारित है, मैं myController वर्ग लोड होगा, लेकिन मैं एक समारोह है कि उनके संबंधित चर के साथ तरीकों की अंतिम अस्तित्व और उनके फोन करने के हैंडल कर सकते हैं?

उत्तर

8

मुझे यकीन है कि आप से क्या मतलब है नहीं कर रहा हूँ "तरीकों में से अंतिम अस्तित्व और उनके संबंधित चर के साथ उनके बुला संभालती है", लेकिन आप call_user_func_array के बाद हो सकता है:

call_user_func_array(
    array($myArray[0], $myArray[1]), 
    array($myArray[2]) 
); 

आप ऐसा करना चाहते हैं कंक्रीट उदाहरण के लिए आपने $controller = new $myArray(0) के साथ बनाया है, $myArray[0] को $controller के साथ प्रतिस्थापित करें, उदाहरण के लिए

$controller = new $myArray(0); 
call_user_func_array(
    array($controller, $myArray[1]), 
    array($myArray[2]) 
); 

या new $myArray[0] पारित अगर आप उदाहरण के बारे में ध्यान न कॉल

call_user_func_array(
    array(new $myArray[0], $myArray[1]), 
    array($myArray[2]) 
); 

के बाद खो दिया जा रहा नहीं तो आप एक E_STRICT नोटिस मिल जाएगा और में जो कुछ भी myMethod है $this संदर्भ नहीं दे सकता। PHP manual on possible callback formats भी देखें।


विधि और वर्ग प्रमाणित करने के लिए वास्तव में मौजूद है, तो आप उपयोग कर सकते हैं

उदाहरण:

if (method_exists($myArray[0], $myArray[1])) { 
    call_user_func_array(*/ … */) 
} 

कृपया अपने प्रश्न को स्पष्ट अगर कुछ और मतलब है तो टयन। On a sidenote, this was probably answered before, लेकिन चूंकि मुझे यकीन नहीं है कि सवाल क्या है, मुझे भी यकीन नहीं है कि इनमें से कौन सा चयन करना है।

+0

स्थिर तरीकों के साथ यह केवल काम करता है, और आप वर्ग –

+0

@kemp सच नहीं का एक उदाहरण की जरूरत है, लेकिन स्पष्टीकरण जोड़ा। मुझे लगता है कि यही तुम्हारा मतलब है। – Gordon

+0

आप सही हैं, मेरा बुरा –

1

मुझे लगता है कि यह होगा भी काम करते हैं:

$obj = new $myArray[0]; 
$obj->{$myArray[1]}($myArray[2]);