ООП. Написание сайта. Проверка возможности доступа к функции.

GooG2e

Новичок
Собираюсь разработать сайт для группы(в универе) и решил программить его на ООП(без ООП программировал и можно сказать в php на 3-4 балла из 5 спокойно шарю). Думаю такой опыт был бы достаточно полезным.
Собственно предисловие кончилось и теперь к делу. Была такая идея, чтобы при попытке вызова какого-либо метода в классе автоматически вызывалась функция, которая проверяла бы может ли данный класс(из которого вызываю) вызвать данный класс и функцию(через debug_backtrace()). И встала проблема - как сделать эту автоматическую проверку для всех функций. Прошу помочь) Заранее прошу не ругаться т.к. опыт ещё не большой в подобной работе.
 

fixxxer

К.О.
Партнер клуба
Что-то ты очень странное хочешь.
Телепатический модуль у меня глючит, но, наверное, тебе надо ACL (типа того)
 

GooG2e

Новичок
Да нет с телепатическим модулем у вас все нормально( заранее извиняюсь ещё не всегда могу до конца свою мысль сформулировать). Это то что надо, но я так понимаю именно в php такое не реализовано и нужны доп. модули.
P.S. Мне честно говоря интересно это вообще имеет смысл делать.
P.S.S. Сайт планировал примерно так - некоторое количество основных классов( работа с базой данных, защита, загрузка настроек, шаблонизатор etc.) и отдельный класс, который будет наследоваться и на его основе будут разрабатываться доп. классы, которые будут выполнять вспомогательную задачу.
Заранее спасибо за помощь)
 

fixxxer

К.О.
Партнер клуба
Может, стоит взять какой-то фреймворк, где это все уже сделано? Ну хотя бы посмотреть, как оно там.

Zend Framework тот же.
 

GooG2e

Новичок
В плане взять где уже все сделано я очень даже согласен) Здесь я более чем согласен - зачем делать лишнюю работу, если её уже кто-то сделал)
С Zend Framework все более или менее понятно) Теперь буду потихоньку документацию и возможности изучать)

Спасибо за помощь. Если будут какие-то проблемы то опишу здесь)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
нет, не "лишнюю работу, если её уже кто-то сделал", а правильное решение (опыт работы с фреймворками), за что з/п повышается на 30-50%
 

Redjik

Джедай-мастер
а обычными гетерами, сетерами и автолоадом не обойтись? Не стеб - правда интересно.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Рефлексией можно обойтись точно. Можно сделать и геттерами/сеттерами и прочей магией, только тогда придется код под это подпиливать, а это не очень хорошо. Рефлексия тут отлично сработает.
 

Aleks_P

Новичок
Тебе нужно работать через методы-перехватчики класса:
__set
__get
__call
__isset
__unset
 

GooG2e

Новичок
Эти методы работают только для функций, которые НЕ были определены в классе. А с уже определенными не прокатывает - тестировал да и на php.net так написано)
С рефлексией не работал и что она из себя представляет не знаю) Щас почитаю может что-нить новенькое для себя открою)
 

whirlwind

TDD infected, paranoid
И как тут поможет рефлекшн? Рефлекшн - это средство реверс инжиниригна, то есть преднамеренное разбирание компонентов программы по кусочкам. А он хочет прозрачно.
 

whirlwind

TDD infected, paranoid
GooG2e прежде чем продолжать искать решение этой безумной идеи, подумай сначала о реакции на подобные проверки. Кто будет потребителем такого низкоуровневого ACL и как эта реакция будет кореллировать с пользователем, который будет смотреть и тыркать твою программу.
 

A1x

Новичок
GooG2e
хотите сделать дружественные классы как в с++ ?
 

GooG2e

Новичок
whirlwind
Во - наконец-то пошло то, что я и хотел - здравая критика) Я именно её и хотел услышать в первую очередь )
A1x
Вот про это не совсем понял - т.к. в C++ не прогал никогда( есть небольшие знания в Си(совсем немного проходили в универе пол семестра) и в java( держал эмулятор и немного под него прогал). Что вы имели в виду?

P.S.И данный ACL я уже решил реализовывать через Zend. Если кто знает ещё какие-то фреймворки(желательно на русском - я хоть и перевожу с английского довольно неплохо, но как-то лучше вникать в код, а не в английский язык) буду очень рад услышать прпедложения.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
И как тут поможет рефлекшн?
Пользовательские классы наследуются от одного класса, который умеет проверять нужные разрешения и вызывать системные классы/методы, которые не имеют публичных методов.

А чтоб было на 100% прозрачно это надо http://wiki.agiledev.ru/doku.php?id=aop:aop_php что-то такое :)

Можно еще сделать изврат с динамическим формированием/переписыванием кода.

Но в целом — оно все не нужно, конечно.

Если кто знает ещё какие-то фреймворки(желательно на русском
Фреймворки на русском? На PHP не пойдет?
 

GooG2e

Новичок
флоппик
Нет фреймворки сами на php, а документация к ним на русском)
Пользовательские классы наследуются от одного класса, который умеет проверять нужные разрешения и вызывать системные классы/методы, которые не имеют публичных методов.
Примерно это и нужно)
Но в целом — оно все не нужно, конечно.
Вкратце можно что к чему?
A1x
Можно сказать примерно это и хочу, но только с динамически регулируемыми правами.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
В целом, регулирование прав на доступ на уровне кода не нужно, потому что на практике требуется разграничение прав на уровне бизнес-логики, что проще, очевидней, и несет куда меньше потенциальных ошибок и слабых мест.
 

whirlwind

TDD infected, paranoid
На самом деле, это делается достаточно просто: декоратор + __call
Но как и все хаки пыха, данное решение тоже приносит на алтарь интерфейсы.
 

Aleks_P

Новичок
Эти методы работают только для функций, которые НЕ были определены в классе. А с уже определенными не прокатывает - тестировал да и на php.net так написано)
С рефлексией не работал и что она из себя представляет не знаю) Щас почитаю может что-нить новенькое для себя открою)
Естественно, но что мешает в это случае переименовать внутренние функции класса и составить карту внешним именам? Внешний вызов идет как обычно, но т.к. функции с таким именем нет, то вызов уходит в __call, который по карте функций находит соотвествующую внутреннюю.
 
Сверху