youngmysteriouslight
@youngmysteriouslight
ТК, ТТ, JS, FP, WM

Как создать функцию-событие, паттерн Listener и т.п. в PHP?

Хочу организовать вызов заранее неизвестной функции при выполнении определённых условий.
Вот аналог на JS:
var obj = {
  onEvent: function() { },
  doSmth: function() { if (true) this.onEvent(); }
}
/* в другом месте */
obj.onEvent = function () { alert('hi'); };

Я делаю так:
class MyClass {
  ...
  public $onError = 'default_function_name';
  public function execQuery($query){
	if (true) {
		($this->onError)($this->msg);
	}
}

пишет: PHP Parse error: syntax error, unexpected '('
Если убрать скобки, то пишет PHP Fatal error: Call to undefined method MyClass::onError

upd. Если $this->onError вынести в отдельную переменную, то всё работает:
$fn = $this->onError;
$fn($this->msg);

Но, честно говоря, совсем не понимаю, почему так. По каким словам искать объяснение этого механизма и как по уму сделать паттерн Listener, который более сложный, чем просто события?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Ticketland.ru Москва
от 120 000 руб.
Интерно Ростов-на-Дону
от 35 000 до 50 000 руб.
Радюшин и Компания Тольятти
от 50 000 до 100 000 руб.