![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
gagar |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 3.8.2007 Репутация: нет Всего: нет |
Доброго времени суток, уважаемые эксперты!
Вопрос: в PHP5 существует magic method __call(). Как я понял из доступной мне документации этот метод выполняется при вызове несуществующего метода класса. Существуют ли в PHP механизмы, позволяющие перехватывать вызов существующего метода класса? |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
А смысл? Вы обращаетесь $obj->method(), который у вас уже определен Вами, зачем его перегружать?
|
|||
|
||||
gagar |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 3.8.2007 Репутация: нет Всего: нет |
Смысл есть. Используя перехват вызова функций можно управлять правами доступа на сайт на уровне функций динамически, не меняя код всего сайта. Идея "классическая": свести всю защиту в единый базовый "центр", чтоб не задумываться о ней в процессе написания сложных скриптов. Математика под это дело мной уже разработана, осталось реализовать перехват функций
![]() |
|||
|
||||
murod |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 17.9.2005 Где: Uzbekistan/Tashke nt Репутация: 2 Всего: 4 |
Перехват функции это не самая хорошая идея. лучше было бы проверять перед вызовом метода объекта на доступ. Хотя перехват вызова метода можно реализовать с помощью Рефлексией. Надо создать класс делегатор и через него вызывать методы объектов.
вот пример из книги "PHP Power Programming":
--------------------
Люди всего мира берегите природу! |
||||
|
|||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
А что мешает делать эту проверку в __call() а затем внутри этого метода, в зависимости от результатов проверки вызывать нужные пользовательские методы, к примеру cMyMethod(), а обращаться myMethod().
Для PHP, имхо, это наиболее рациональное решение. Или увязываться на P/P/P... |
|||
|
||||
gagar |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 3.8.2007 Репутация: нет Всего: нет |
__call() срабатывает только при вызове несуществующего метода. В "Рефлексии" реализован вызов несуществующего метода с последующим перенаправлением в нужный класс.
Да! Вот это как раз то, что надо! Правда, несколько извращенно, но мысль понятна. Спасибо Это сообщение отредактировал(а) gagar - 3.8.2007, 15:14 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |