![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Добрый день.
Есть простой класс
как узнать, что вызываемый метод открыт? В голову приходит только такой вариант: перед закрытыми методами ставим землю (было t3(), стало _t3()) и когда его вызывают делать проверку. Но способ какой то кривой, может есть готовая ф-ция? -------------------- Amazing ![]() |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
публик или привате? PHP сам скажет. А для чего? для писания руками, вроде как, хватает и error'ов php. Что-то генерится автоматически или совсем посторонними юзерами? для пущего визуального эффекта можно приватные методы делать с двумя подчеркиваниями в начале, а протектнутые - с одним. Смешно становится, когда политика партии меняется по нескольку раз на дн в связи с аварийным дописыванием проекта. Есть reflection для несложного анализа свеженаписанного чужого кода. Не оно? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
чтобы на этапе вызова отсечь неправильно обращение. К данному классу можно будет обратиться так: http://example/test/t1 и соответственно вызовется метод t1(). А вот если будет попытка вызвать так http://example/test/t3 (t3() - private, нельзя его так вызывать) то мне надо отреагировать -------------------- Amazing ![]() |
|||
|
||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
ага..а потом public функция становиться protected и надо менять каждый вызов этой функции в потомках ![]()
![]() MoLeX посмотри тут http://www.php.net/manual/en/function.method-exists.php пост от
а зачем это вообще понадобилось? Это сообщение отредактировал(а) azesmcar - 23.9.2010, 11:01 |
||||||
|
|||||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
MoLeX, гы-гы... Это уже не приватно-публичное, а юзеродоступное
![]() ![]() Обычно я делал префикс у таких функций. Функция do_logout вызывается по запросу ?do=logout. Префикс нужен, чтобы юзеры не вызывали все подряд и не пришлось внимательно тестить, не приведет ли непреднамеренный вызов этого метода к непредсказуемым результатам. Никакой отдельной политики приватноcти нету. То есть, при получении заявки на выполнение действия контроллер ищет фунцию с менем 'do_'.{действие}у модели. если нету - ковыряемся в другом месте и плачемся об ошибке , по желанию... Это сообщение отредактировал(а) ksnk - 23.9.2010, 11:38 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
MoLeX |
|
||||||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
ksnk,
в CI как раз делают через землю
но шальная мысля моя пошла дальше и решила - "а почему бы не использовать для этого public & private" Добавлено через 1 минуту и 49 секунд
то что доктор прописал) Это сообщение отредактировал(а) MoLeX - 23.9.2010, 11:38 -------------------- Amazing ![]() |
||||||
|
|||||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
MoLeX Обычно, внутренняя логика исполнения развивается менее предсказуемо, чем интерфейсные функции. Тоесть предсказать что конкретно захочет юзер от системы и зафиксировать список интерфейсных функций -значительно проще, чем предсказать историю развития внутренностей системы. Тоесть делать функции "доступными" юзеру с помошью префикса - значительно менее затратная политика. чем "скрывать" от юзера некоторые функции префиксом. imho, конечно...
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Shogun |
|
|||
![]() сёгун-сан ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 8.6.2006 Где: Кишинёв Репутация: 9 Всего: 11 |
Для этого есть функция is_callable.
if (is_callable(array('Test', 't2'))) { ... } если это приватный или протектед метод, или же такого метода и вовсе нет, то не пройдет... Это сообщение отредактировал(а) Shogun - 23.9.2010, 17:10 -------------------- 2b || !2b |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Shogun, да, как то прошляпил эту функцию
-------------------- Amazing ![]() |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
MoLeX, можешь подробнее объяснить зачем тебе понадобилось доступность вызова метода по URL-у реализовывать через доступность вызова функции в коде? Если пользователей разделить на группы по возможностям то схема сразу потребует переделки.
Может лучше реализовать полноценный Access Control List? |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
krundetz, используется система Модель-Отображение-Контроллер, в итоге все работает по такому принципу:
www.example.com/class/function Это сообщение отредактировал(а) MoLeX - 29.9.2010, 05:46 -------------------- Amazing ![]() |
|||
|
||||
gta4kv |
|
|||
![]() Walking around mad. ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: 21 Всего: 91 |
Прямое обращение к функциям - извращенство.
Я бы сделал обязательную функцию init для каждого класса и описал её в интерфейсе. А init уже делал то, что тебе нужно. (is_callable, или еще какие-то проверки). Это сообщение отредактировал(а) gta4kv - 29.9.2010, 07:36 |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
и так) -------------------- Amazing ![]() |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
я это понял, я не понял почему именно так? почему выбрал такую реализацию? каковы у этой реализации преимущества, по сравнению с полноценным Access Control List? ведь чем то ты руководствовался при выборе решения Это сообщение отредактировал(а) krundetz - 29.9.2010, 21:38 |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
krundetz, тем что она ближе мне (сталкивался, работал) вот и решил её использовать.
примерчик дай ![]() -------------------- Amazing ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |