2011-05-01 76 views
2

我有三個類。 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 
    } 
} 

任何想法?

+0

解釋什麼是發出你想用這個技巧來解決。 – zerkms 2011-05-01 13:48:36

+0

嗯,其中一個原因是,我試圖用類似的'namespace'對一些類進行分組。按照我的例子'class B'只是命名空間類,'class C'是實際的目標類。另一個原因是,有些像觀察者類那樣監視請求並更新一組不同的類。 – Starx 2011-05-01 13:53:18

+0

這不是一項任務,它是一個解決方案。奇怪的解決方案。 – zerkms 2011-05-01 13:54:47

回答

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); 
} 
相關問題