我有三节课。 Class A
,Class B
,Class 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
}
}
任何想法?
答案 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);
}