Возможный дубликат:
Закрытие вызова, присвоенное объекту напрямую
Почему это невозможно в PHP? Я хочу, чтобы создать функцию «на лету» для определенного объекта.
$a = 'a'; $tokenMapper->tokenJoinHistories = function($a) { echo $a; }; $tokenMapper->tokenJoinHistories($a);
С $obj->foo()
вы вызываете методы, но вы хотите вызвать свойство как функцию / метод. Это просто смущает парсер, потому что он не нашел метод с именем foo()
, но он не может ожидать, что какое-либо свойство будет чем-то вызываемым.
call_user_func($tokenMapper->tokenJoinHistories, $a);
Или вы расширяете свой
class Bar { public function __call ($name, $args) { if (isset($this->$name) && is_callable($this->$name)) { return call_user_func_array($this->$name, $args); } else { throw new Exception("Undefined method '$name'"); } } }
(Вероятно, в этом быстро написанном примере есть некоторые проблемы)
PHP пытается сопоставить метод экземпляра под названием «tokenJoinHistories», который не определен в исходном классе
Вы должны сделать вместо этого
$anon_func = $tokenMapper->tokenJoinHistories; $anon_func($a);
Прочитайте здесь документацию, особенно часть комментария.