PHP

2010-06-05 7 views
6

में विधि दृश्यता की जांच करना क्या कोई तरीका यह जांचने का कोई तरीका है कि क्लास विधि को निजी या सार्वजनिक घोषित किया गया है या नहीं?PHP

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

उत्तर

8

आप उस के लिए reflection एक्सटेंशन का उपयोग कर सकते हैं, इन पर विचार करें:

ReflectionMethod::isPrivate
ReflectionMethod::isProtected
ReflectionMethod::isPublic
ReflectionMethod::isStatic

+0

आप चाहते हैं भी शायद (शायद) अंतिम/स्थिर/सार भी जांच करने के लिए चाहते हैं। – salathe

7

Safraz Ahmed के जवाब विस्तार करने के लिए (के बाद से प्रतिबिंब प्रलेखन का अभाव है) इस एक त्वरित उदाहरण है:

class foo { 
    private function bar() { 
     echo "bar"; 
    } 
} 

$check = new ReflectionMethod('foo', 'bar'); 

echo $check->isPrivate(); 
+0

यह अच्छा जोड़ा है, +1 :) – Sarfraz

2

दूसरी तरफ से देखने की सुविधा देता है। आपको वास्तव में विधि की दृश्यता स्तर जानने की आवश्यकता नहीं है। आपको यह जानने की जरूरत है कि क्या आप विधि को कॉल कर सकते हैं। http://lv.php.net/is_callable

if(is_callable(array($controller, $method))){ 
    return $controller->$method(); 
}else{ 
    throw new Exception('Method is not callable'); 
    return false; 
} 
+0

यह अभी तक प्रदान किया गया सबसे स्वाभाविक समाधान है। – erisco

+2

हाँ, बहुत अच्छा सुझाव। मुद्दा यह है कि सभी विधि वर्तमान वर्ग के अंदर हैं, इसलिए वे सभी कॉल करने योग्य, निजी या सार्वजनिक होंगे, इसलिए मैं केवल यूआरएल से सार्वजनिक तरीकों को चलाने की अनुमति देकर अपनी खुद की दृश्यता बना रहा हूं। लेकिन कहानी का एक हिस्सा यह भी है कि मैंने पाया कि '__destruct' और ऐसी ज़रूरतें सार्वजनिक होनी चाहिए, और इसलिए यूआरएल द्वारा कॉल करने योग्य था, इसलिए अब मैं एक विधि उपसर्ग (action_) के साथ कॉम्बो के लिए गया हूं। – phobia