将请求重定向到另一个类

时间:2011-05-01 13:45:32

标签: php oop

我有三节课。 Class AClass BClass C。我想要做的是,向B类表格发送请求A类,而B类必须将该请求重定向到C类。

可能是一个简单的例子,从下面会给出一定的想法。

class classa {
    public function __construct() {
        $obj_classb = new classb;
        $obj_classb -> someRequest(); // This request must go to Class B and query the Class C        
    }
}

class classb {
    //This class must do something, which is going to redirect any sorts of request it receives to the next classc
}

class classc {
    public function someRequest() {
        //do whatever
    }
}

任何想法?

1 个答案:

答案 0 :(得分:4)

您可以通过覆盖__call方法来创建“重定向器”类:

class classb {
    private $obj_classc;

    public function __construct() {
        $this->obj_classc = new classc;
    }

    public function __call($name, $arguments) {
        return call_user_func_array(array($this->obj_classc, $name), $arguments);
    }
}

当然这只会“转发”方法调用;如果您有兴趣转发财产获取者/设置者等,您将不得不覆盖更多magic methods

也可以安排选择转发目标(在此示例中,它只是一个自动创建的classc对象;但您可以将其作为参数传递给构造函数,或者以您选择的任何其他方式提供它。

更新:您需要覆盖以转发属性访问的魔术函数:

public function __set($name, $value) {
    $this->obj_classc->$name = $value;
}

public function __get($name) {
    return $this->obj_classc->$name;
}

public function __isset($name) {
    return isset($this->obj_classc->$name);
}

public function __unset($name) {
    unset($this->obj_classc->$name);
}