Я сейчас нахожусь в бесконечной ситуации рекурсии.
Я реализую службу сообщений, которая вызывает различные методы объекта .. она очень похожа на шаблон наблюдателя ..
Вот что происходит:
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";
}
}
Блокируется, когда ни один объект не инициализирован. Он просто переходит от сообщения друг к другу, и никто не может быть инициализирован.
Я ищу какую-то реализацию очереди, которая заставит сообщения ждать друг друга .. Та, где возвращаемые значения все еще установлены. Я хочу, чтобы в классе А и В было как можно меньше стандартного кода.
Мне много говорят о методе not_initialized
, к сожалению, я чувствую, что обсуждение идет в неправильном направлении. Это моя вина, я объясню ситуацию немного больше (и, надеюсь, лучше).
$object
реализует шаблон декоратора - то есть $object
получает больше возможностей (методов), когда я инициализирую класс A и класс B. Мне нужно использовать эти функции, доступные из украшений в методе обмена сообщениями, поэтому его еще не украсили, украсьте его. Я действительно не думаю, что not_initialized
было бы проблемой, потому что, когда говорят, что $objectA
проверено, это еще не украшено - поэтому я хочу добавить эти методы к нему. Класс A и B являются классами декораторов. Так что not_initialized является правильным в то время. Он застревает, когда я пытаюсь украсить предмет. Я изменил код, чтобы лучше отразить эту ситуацию.