2010-06-05 25 views
6

是否有任何方法檢查類方法是否已被聲明爲私有或公共?在PHP中檢查方法的可見性

我正在一個控制器的URL映射到類中的方法,我只想觸發方法,如果他們被定義爲公共。

回答

7

爲了延長Safraz Ahmed的答案(因爲反射缺乏文檔),這是一個簡單的例子:

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

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

echo $check->isPrivate(); 
+0

這是很好的補充,+1 :) – Sarfraz 2010-06-05 20:08:52

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 2010-06-05 20:55:32

+2

是的,非常好的建議。問題是雖然所有的方法都在當前類中,所以它們都是可調用的,私有的或者公共的,所以我通過只允許從url運行公共方法來創建我自己的可見性。但故事的一部分還發現'__destruct'等需要公開,因此可以通過url調用,所以現在我已經用方法前綴(action_)組合了一個組合。 – phobia 2010-06-06 21:01:59