如何创建“监听(等待?)”方法

时间:2012-03-30 08:27:51

标签: php class methods

让我说我有:

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

然后

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

但是一旦调用了方法a,我也希望在它之后立即调用方法b(所以它有一种监听(等待?)直到调用和完成a的那一刻),所以输出是

Hello, John

是否可以这样做,以及它应该如何? 不,拨打$ this-> b();方法a的结尾不是我想要做的解决方案:)提前谢谢:)

2 个答案:

答案 0 :(得分:3)

您正在搜索observer pattern。从互联网上阅读一些例子,你应该能够做你正在尝试的事情。

然而,使用观察者模式的一个非常简单的例子:

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(); 
    }
}

答案 1 :(得分:-1)

你能详细说明你想做什么吗?因为观察者模式建议它涉及附加外部对象列表并实现某种基于事件的系统。而且我不确定观察者的方法是否符合您所描述的需求。

一旦方法运行完毕,基本上没有可能调用另一个方法,我认为没有必要。一个半正确的方法可能是使用__call并使a()方法受保护/私有,并且在__call中拦截调用,运行方法a()并立即运行方法b()。

不幸的是,没有太多细节,我无法提供或想出更好的方法来解决这个问题。为此目的没有php魔术方法。