2010-06-05 5 views
6

Есть ли способ проверить, был ли метод класса объявлен как закрытый или общедоступный?Проверка видимости метода в PHP

Я работаю над контроллером, где URL-адрес сопоставляется методам в классе, и я только хочу вызвать методы, если они определены как общедоступные.

ответ

7

Чтобы продлить ответ Safraz Ahmed «s (с Reflection не хватает документации) это быстрый пример:

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

Да, очень хорошее предложение. Проблема заключается в том, что все методы находятся внутри текущего класса, поэтому все они будут вызываемыми, частными или общедоступными, поэтому я как бы создаю свою собственную видимость, только предоставляя возможность запуска общедоступных методов из URL-адреса. Но часть истории также заключается в том, что я обнаружил, что '__destruct' и такие потребности должны быть общедоступными и поэтому были вызваны по URL-адресу, поэтому теперь я пошел на комбо с префиксом метода (action_). – phobia

Смежные вопросы