Хочу организовать вызов заранее неизвестной функции при выполнении определённых условий.
Вот аналог на 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, который более сложный, чем просто события?