| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > перехват вызова функции |
| Автор: gagar 3.8.2007, 12:28 |
| Доброго времени суток, уважаемые эксперты! Вопрос: в PHP5 существует magic method __call(). Как я понял из доступной мне документации этот метод выполняется при вызове несуществующего метода класса. Существуют ли в PHP механизмы, позволяющие перехватывать вызов существующего метода класса? |
| Автор: Mal Hack 3.8.2007, 12:48 |
| А смысл? Вы обращаетесь $obj->method(), который у вас уже определен Вами, зачем его перегружать? |
| Автор: gagar 3.8.2007, 13:14 |
| Смысл есть. Используя перехват вызова функций можно управлять правами доступа на сайт на уровне функций динамически, не меняя код всего сайта. Идея "классическая": свести всю защиту в единый базовый "центр", чтоб не задумываться о ней в процессе написания сложных скриптов. Математика под это дело мной уже разработана, осталось реализовать перехват функций |
| Автор: murod 3.8.2007, 14:21 | ||||
| Перехват функции это не самая хорошая идея. лучше было бы проверять перед вызовом метода объекта на доступ. Хотя перехват вызова метода можно реализовать с помощью Рефлексией. Надо создать класс делегатор и через него вызывать методы объектов. вот пример из книги "PHP Power Programming":
|
| Автор: Mal Hack 3.8.2007, 15:10 |
| А что мешает делать эту проверку в __call() а затем внутри этого метода, в зависимости от результатов проверки вызывать нужные пользовательские методы, к примеру cMyMethod(), а обращаться myMethod(). Для PHP, имхо, это наиболее рациональное решение. Или увязываться на P/P/P... |
| Автор: gagar 3.8.2007, 15:12 |
| __call() срабатывает только при вызове несуществующего метода. В "Рефлексии" реализован вызов несуществующего метода с последующим перенаправлением в нужный класс. Да! Вот это как раз то, что надо! Правда, несколько извращенно, но мысль понятна. Спасибо |