2015-09-26 3 views
1

Интересно, есть ли способ проверить модификатор доступа метода внутри его класса. Например, я хотел бы использовать ReMap-метод Codeigniter для счета-системы:Проверка модификаторов acces методов

public function _remap($method, $params = array()){ 

    if($this->validation->isValidActiveSession()){ 

     if(method_exists($this, $method)) 
      call_user_func_array(array($this, $method), $params); 
     else 
      show_404(); 

    }else{ 

     redirect('login'); 

    } 

} 

Если я не могу найти правильный сеанс для пользователя, он получает отказ. Я также хочу убедиться, что пользователь, у которого есть соответствующий сеанс, может вызывать только общедоступные методы. К сожалению, method_exists() возвращает true независимо от того, является ли метод общедоступным или закрытым.

У меня уже есть решения для этой конкретной проблемы:

  • Не используя переназначить и проверить сессию в каждом публичном методе

  • , используя массив, который хранит доступные методы для действительных пользователей

но он чувствует себя неудобно, поэтому я просто ищу «выгодное» решение.

ответ

2

Использование Reflectionmethod

$reflection = new ReflectionMethod($this, $method); 
    if ($reflection->isPublic()) { 
     echo "Public method"; 
    } 
    if ($reflection->isPrivate()) { 
     echo "Private method"; 
    } 
    if ($reflection->isProtected()) { 
     echo "Protected method"; 
    } 
Смежные вопросы