Как создать метод «прослушивания (ожидания?)» - PullRequest
1 голос
/ 30 марта 2012

Допустим, у меня есть:

class X
{
    function a()
    {
        echo "Hello, ";
    }
    function b()
    {
        echo "John!";
    }
}

, а затем

Y = new X();
Y->a();

но как только метод a вызывается, я также хочу, чтобы метод b вызывался сразу после него (поэтому он как бы прослушивает (ждет?) До момента, когда вызывается и завершается), поэтому вывод равен

Hello, John

Возможно ли это сделать и как это должно выглядеть? И нет, вызывая $ this-> b (); в конце метода a НЕ является решением того, что я хочу сделать :) Заранее спасибо:)

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Вы ищете шаблон наблюдателя . Прочитайте пример из интернета, и вы сможете делать то, что пытаетесь.

Однако, очень простой пример использования шаблона наблюдателя:

class X
{
    private $observer;
    public function __construct() {
        $this -> observer = new XObserver();
    }

    function a() {
        echo "Hello,";      
        $this -> observer -> aExecuted($this);
    }

    function b() {
        echo "John!";
    }
}

class XObserver {

    public function aExecuted($obj) {
        return $obj -> b(); 
    }
}
0 голосов
/ 30 марта 2012

Можете ли вы подробнее рассказать о том, что вы пытаетесь сделать?Поскольку шаблон наблюдателя предложил, это включает в себя прикрепление списка внешних объектов и реализацию некоторой системы, основанной на событиях.И я не уверен, что подход наблюдателя соответствует вашим потребностям из того, что вы описываете.

По сути, нет никакой возможности вызвать другой метод после завершения метода, и я не вижу в этом необходимости.Полу правильным подходом может быть использование __call и сделать метод a () защищенным / закрытым, а в __call перехватить вызов, запустить метод a () и немедленно запустить метод b ().

К сожалению, без особогодетали я не могу предоставить или придумать лучший способ решить эту проблему.Для этого не существует магических методов php.

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