Blog. Just Blog

Вызов защищенных и приватных методов класса

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Вызов защищенных и приватных методов класса
Вызов защищенных и приватных методов класса

Продолжение предыдущей статьи, где мы меняли значения приватных свойств класса. Сегодня мы пойдем дальше и будем вызывать приватные методы класса. Как и в случае с приватными свойствами, рекомендации по использованию этого трюка прежние: никогда и ни при каких условиях так не делайте.

Для тестирования возьмем простой класс с приватным методом, который в нормальных условиях можно вызвать только через официальный публичный метод. Для большего эффекта в нем будет дополнительно использоваться приватное свойство класса.
  1. class MyClass {
  2.     private $password='paSSw0Rd';
  3.  
  4.     public function login($login) {
  5.         $this->fn_priv($login$this->password);
  6.     }
  7.  
  8.     private function fn_priv($login$password) {
  9.         echo 'Logged with '.$login.'@'.$password;
  10.     }
  11. }
Для вызова приватного метода класса используется стандартный класс ReflectionMethod. С помощью методов этого класса можно узнать свойства любого метода любого класса, изменить права доступа к ним, а также вызвать любой метод. Делается это примерно так:
  1. // Создать экземпляр класса
  2. $my_class = new MyClass;
  3.  
  4. $my_class->login('superuser');
  5. // -> Logged with superuser@paSSw0Rd
  6.  
  7. $reflection = new ReflectionMethod($my_class'fn_priv');
  8. // Открыть доступ к приватному методу класса
  9. $reflection->setAccessible(true);
  10.  
  11. // Вызвать приватный метод класса
  12. $reflection->invokeArgs($my_class,
  13.     // Параметры вызова
  14.     array(
  15.         'admin''SupaDupaPassa'
  16.     )
  17. );
  18. // -> Logged with admin@SupaDupaPassa
  19.  
  20. // Закрыть доступ
  21. $reflection->setAccessible(false);
Теперь у любителей пострелять себе в ногу есть эффективные инструменты для этого. Очень надеюсь, что они вам никогда не понадобится.

Поделиться ссылкой ВКонтакте
Просмотров: 745 | Комментариев: 0

Метки: PHP
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0038 сек.) / Память: 4.5 Mb
Наверх