我目前遇到無窮遞歸情況。解決php無窮遞歸問題
我執行調用各種對象的方法,消息服務..它是相當相似的觀察者模式..
這是怎麼回事什麼:
Dispatcher.php
class Dispatcher {
...
public function message($name, $method) {
// Find the object based on the name
$object = $this->findObjectByName($name);
if(!$object->decorations))
// Decorate the object
$object = new $name($object); // This is where it locks up.
$object->decorations = true;
}
return $object->$method();
...
}
class A {
function __construct()
{
$Dispatcher->message("B", "getName");
}
public function getName() {
return "Class A";
}
}
class B {
function __construct()
{
// Assume $Dispatcher is the classes
$Dispatcher->message("A", "getName");
}
public function getName() {
return "Class B";
}
}
兩個對象均未初始化時鎖定。它只是從消息中來回傳遞,沒有人可以初始化。
我正在尋找某種隊列實現,它將使消息等待對方。返回值仍然設置的位置之一。我希望儘可能在A類和B類中使用盡可能少的樣板代碼。
我得到了很多談not_initialized
方法的,不幸的是我覺得這個討論在錯誤的方向去。這是我的錯,我會再解釋一下情況(我希望更好)。
$object
實現裝飾圖案 - 這是$object
得到更多的功能(方法),當我初始化A類和B類,我需要使用從消息傳遞方法裝飾提供這些功能,這就是爲什麼如果沒有裝飾,裝飾它。我真的不認爲not_initialized
會成爲問題,因爲當說$objectA
被選中時,它尚未裝飾 - 所以我想將這些方法添加到它。類A和B是裝飾類。所以not_initialized在當時是正確的。當我嘗試裝飾物體時,它會卡住。我改變了代碼以更好地反映這種情況。
請提供'Dispatcher :: not_initialized()'的代碼,因爲那是產生錯誤的代碼,因爲它不能正確記住哪些對象已經被初始化。 – jigfox 2010-05-22 11:41:58
另外,'findObjectByName'在做什麼?我不確定你想在這裏實現什麼。你是否試圖用A和B類來裝飾單個對象? – Thorarin 2010-05-22 15:41:57