Всех приветствую! Я недавно начал изучать замечательную библиотеку Qt. В этой библиотеке основополагающей технологией является технология "Сигналов и слотов", которая позволяет связывать объекты между собой, причем так, что они о друг друге ничего не знают. Сама идея просто уникальна и мне захотелось использовать её при программировании на PHP.
Хочется узнать ваши мнения об этой технологии и реализации её на PHP.
И за одним выкладываю код, который пока что удалось написать:
<?php
class CObject {
    private static $connections;
    private $class_id = 0; //уникальный идентификатор класса
    //функция подключения классов
    public static function connect($emm_class, $signal, $dest_class, $slot) {
        static $id = 0; //генератор уникальных идентификаторов классов
        if(! $emm_class->class_id) //если идентификатора нет,
            $emm_class->class_id = ++$id; //формируем новый
        self::$connections[$emm_class->class_id][$signal][] = 
            array($dest_class, $slot);
    }
    //отправка сообщений
    public function emmit($signal, $params = NULL) {
        $conn = @self::$connections[$this->class_id][$signal];
        if($conn) {
            foreach($conn as $c) {
                eval("@\$c[0]->" . $c[1] ."(\$params);");
            }
        }
    }
}
class CFoo1 extends CObject {
    //функция - слот
    public function slotOK() {
        echo "CFoo1::msgOK()<br>";
    }
}
class CFoo3 extends CObject {
    //функция - слот
    public function slotOK($param) {
        print("CFoo3::dump_var:<br>");
        print(var_dump(nl2br(var_dump($param))));
        print("<br>");
        echo "CFoo3::msgOK()<br>";
    }
    public function slotHelloWorld() {
        echo "Hello, World!";
    }
}
class CFoo2 extends CObject {
    public function __construct() {
    }
    public function test() {
        $obj->m_1 = 1;
        $obj->m_2 = 'Hello, World!';
        //отправка сообщений
        $this->emmit('signOK',$obj);
    }
}
$a = new CFoo1();
$c = new CFoo3();
$b = new CFoo2();
CObject::connect($b, 'signOK', $a, 'slotOK');
CObject::connect($b, 'signOK', $c, 'slotOK');
CObject::connect($b, 'signOK', $c, 'slotHelloWorld');
$b->test();
?>
Программа выводит в браузер следующее:
CFoo1::msgOK()
CFoo3::dump_var:
object(stdClass)#4 (2) { ["m_1"]=> int(1) ["m_2"]=> string(13) "Hello, World!" } string(0) "" 
CFoo3::msgOK()
Hello, World!