Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для Wallter
6 / 6 / 0
Регистрация: 16.10.2011
Сообщений: 64

Обработка кода перед и после методов класса

28.02.2013, 16:19. Показов 1601. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: Есть класс
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 <?php
class User {
    public function __constructor(){
        /*Запись в лог*/
    }
    public function one()
    {
        /*Действие 1*/
    }
    public function two()
    {
        /*Действие 2*/
    }
}
?>
Вызываем
PHP
1
2
3
4
5
 <?php
    $member = new User();
    $member->one();
    $member->two();
?>
Необходимо реализовать запись в лог не только при создании обьекта но и перед вызовом метода и после его завершения.
Дописывать строки записи в лог в каждый метод не подходит по идеологическим соображениям.
Есть идеи?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2013, 16:19
Ответы с готовыми решениями:

Обработка методов класса
Привет! Такая проблема: на форме ставлю две кнопки: по нажатию одной кнопки создаю с помощью конструктора элемент класса. Хочу, чтобы при...

Обработка события Click, вставка html после генерации и обработка этого кода
Подскажите пожалуйста как заставить работать эту часть кода 18 строка $(&quot;.image&quot;).click(function() { ...

Как скрыть из области видимости часть методов базового класса после наследования?
Продолжая тему наследования, в которой было выяснено, что можно вернуть в область видимости часть методов, которые потерялись при...

4
 Аватар для koza4ok
632 / 440 / 67
Регистрация: 19.09.2012
Сообщений: 1,632
28.02.2013, 16:56
Вам нужно что-то наподобии http://www.php.net/manual/ru/l... bject.call только для существ.методов.

Посмотрите такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Foo 
{
    public function bar() {
        echo 'foobar';
    }
}
 
class Decorator 
{
    protected $foo;
 
    function __construct(Foo $foo) {
       $this->foo = $foo;
    }
 
    function __call($method_name, $args) {
       echo 'Calling method ',$method_name,'<br />';
       return call_user_func_array(array($this->foo, $method_name), $args);
    }
}
 
$foo = new Decorator(new Foo());
print_r($foo);
$foo->bar();
Вы можете методы перенести в другой класс,а при их вызове вы их будете вызать из него и автоматически делать запись в лог.
1
20 / 19 / 9
Регистрация: 24.05.2011
Сообщений: 89
07.08.2013, 16:28
Цитата Сообщение от koza4ok Посмотреть сообщение
Вам нужно что-то наподобии http://www.php.net/manual/ru/l... bject.call только для существ.методов.

Вы можете методы перенести в другой класс,а при их вызове вы их будете вызать из него и автоматически делать запись в лог.
А если есть несколько классов, то как вызвать их методы из класса Decorator ?
Ведь кроме $method_name , надо ещё в call_user_func_array() название класса к которому принадлежит метод, передать?
0
20 / 19 / 9
Регистрация: 24.05.2011
Сообщений: 89
09.08.2013, 03:30
Цитата Сообщение от SvSerg Посмотреть сообщение
А если есть несколько классов, то как вызвать их методы из класса Decorator ?
Ведь кроме $method_name , надо ещё в call_user_func_array() название класса к которому принадлежит метод, передать?
Так возможно ли по названию метода узнать к какому классу он принадлежит?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.08.2013, 10:31
по сути - нет. Но можно поизвращаться, наподобие такого
PHP
1
2
3
4
5
6
7
8
9
public function __call($method, $args)
{
    if( method_exists($this, $method) )
        return call_user_func_array( array($this, $method), $args );
    foreach($this as $property=>$value)
        if( is_object($value) && method_exists($value, $method) && is_callable($property.'::'.$method) )
            return call_user_func_array( array($value, $method), $args );
    return false;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2013, 10:31
Помогаю со студенческими работами здесь

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе...

Выполнение определенного кода перед нажатием на кнопку и после него (для всех кнопок)
задача такая : к событию on_click кнопки добавить вот такую конструкцию btn.enabled := false; //код btn.enabled := true; не охото...

Перегрузка класса - после изменения кода перегрузить метод
class DrawPoint : public QWidget { public: DrawPoint(QWidget *p = 0) : QWidget(p){} protected: virtual void...

Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только создание объектов и вызов методов
Всем привет) помогите пожалуйста с заданием &quot;Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только...

Как вынести описание методов вложенного класса за пределы класса?
Подскажите, пожалуйста, как мне вынести описание методов вложенного класса за пределы класса?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru