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, который более сложный, чем просто события?
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
DevMan
@DevMan Куратор тега PHP
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
IMAGINWEB Москва
от 55 000 до 85 000 руб.
Владис Владимир
от 100 000 до 150 000 руб.
Индекс.СРО Ростов-на-Дону
от 45 000 до 70 000 руб.
25 июн. 2019, в 08:45
25000 руб./за проект
25 июн. 2019, в 00:24
15000 руб./за проект