Как реализовать pub / подкласс в PHP?

#php #callback #publish-subscribe

#php #Обратный вызов #опубликовать-подписаться

Вопрос:

У меня есть класс EventEmitter следующим образом:

Как мне реализовать метод publisher (emit) для перебора всех событий и их вызова? (при этом убедитесь, что все обратные вызовы всегда безопасны для вызова)

 class EventEmitter {

    private static $events = array(); // all subscriptions

    public function __construct() {}

  // calls the last subscription on the stack

    public function emit() {

    }

  // adds subscriptions to the stack

    public function subscribe($name, $callback) {

      if(empty(self::$events[$name]))
        self::$events[$name] = array();

      array_push(self::$events[$name], $callback);
    }

}

$emitter = new EventEmitter;

$error_callback = function($data) {
    echo "Error 1. {$data["message"]} n";
};

$error_callback2 = function($data) {
    echo "Error 2. {$data["message"]} n";
};

$success_callback = function($data) {
    echo "SUCCESS! {$data["message"]} n";
};
  

Комментарии:

1. Ваш вопрос довольно неясен. Вы создаете три переменные, которые содержат обратные вызовы, но вы ничего с ними не делаете? Где именно вы застряли?

2. Используйте callable подсказку типа.

3. Какой смысл иметь экземпляры, когда полагаешься на static $events массив, а свойства экземпляра отсутствуют?

4. emit не имеет $event_name аргумента. Сначала вы хотите «перебрать все события и вызвать их» , затем вы хотите // calls the last subscription on the stack . Противоречиво.

5. Рассмотрим interface вместо функций, поскольку нет простого способа обеспечить сигнатуры функций при обратных вызовах, кроме дорогостоящего отражения.