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

Изменение защищенных и приватных свойств класса
Кто хоть раз пробовал ООП в PHP, знает, что при попытке записать что-то в защищенные или приватные свойства класса, интерпретатор выдаст ошибку. Это хорошо и правильно, приватные и защищенные свойства для того и сделаны именно такими. Но в PHP есть средства, с помощью которых можно обойти это правило и поменять эти свойства извне класса. Сначала позвольте дать вам три совета по использованию этих средств. Во-первых, никогда так не делайте. Во-вторых, никогда так не делайте. Ну и в-третьих, никогда так не делайте. Потому что на практике нет и быть не может ситуаций, когда это может действительно понадобиться, а огрести проблем - как нечего делать. Короче, я вас предупредил.
Для тестирования возьмем простейший класс с защищенным и приватным свойствами, а также с методами, позволяющими вывести на экран значения этих свойств:
Code (PHP) : Убрать нумерацию
- class MyClass {
- private $pr_priv='private value';
- protected $pr_prot='protected value';
- public function get_private() {
- echo $this->pr_priv;
- }
- public function get_protected() {
- echo $this->pr_prot;
- }
- }
Code (PHP) : Убрать нумерацию
- // Создать экземпляр класса
- $my_class = new MyClass;
- // Вывести значение приватного свойства
- $my_class->get_private();
- // -> "private value"
- $reflection = new ReflectionProperty($my_class, 'pr_priv');
- // Открыть доступ к приватному свойству класса
- $reflection->setAccessible(true);
- // Получить значение приватного свойства
- $value=$reflection->getValue($my_class);
- echo $value;
- // -> "private value"
- // Изменить значение приватного свойства
- $value=$reflection->setValue($my_class, 'fucked!');
- // Закрыть доступ
- $reflection->setAccessible(false);
- // Вывести значение приватного свойства
- $my_class->get_private();
- // -> "fucked!"
Просмотров: 1688 | Комментариев: 0
Метки: PHP

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий
Заполните форму для добавления комментария
