Запуск функции при вызове родительского открытого метода (например, __call) - PullRequest
0 голосов
/ 13 апреля 2011

Слово перед моим вопросом, чтобы сказать, что я довольно новичок в ООП в PHP, и я очень благодарен сайту и вам всем за чтение - и иногда прекрасный ответ (как вы можете видеть здесь или здесь , или даже здесь ) и помогали мне в моем позднем (вроде) улучшении, связанном с занятиями.

Все мои предыдущие вопросы привели меня сегодня к этому:
В классе, расширяющем PDOStatement, как я могу запускать действие по умолчанию каждый раз, когда вызывается один из родительских открытых методов?

Я могу сделать это:

class genc_query extends PDOStatement{
  public function rowCount(){
    $this->myDefaultAction();
    return parent::rowCount();
  }
}

Но так как мне нужно одинаково изменить почти все нативные методы, мне интересно, нет ли способа вызвать такую ​​функцию, как __call () как если бы эти методы были приватными (так как сделать их приватными невозможно).

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Ради ясного кода расширьте каждый метод (означает: перезаписать и вызовите parent::method() там), для которого вы хотите иметь дополнительное поведение. Иначе наступит день, когда вы или кто-то еще можете действительно запутаться в том, что там происходит.

1 голос
/ 13 апреля 2011

так как невозможно сделать их приватными

Действительно, похоже, это так.

ReflectionMethod может позволить вам изменить доступность метода , но кажется, что он либо не работает с внутренними методами (т.е. не определен пользователем), либо не установит открытые методы для защищенных /частный. Кажется, он предназначен для того, чтобы сделать открытые / закрытые методы публичными.

Похоже, ваш шаблон копирования и вставки внутри каждого метода будет необходим. Помимо __sleep и __wakeup, существует всего около трех десятков методов, поэтому это займет у вас всего несколько минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...