Вызов метода (хранится в переменной) в замыкании

Я пытаюсь найти способ заставить Пример 2 работать, если это возможно. Кто-нибудь подаст мне руку, пожалуйста?

ВЫЗОВ

$this->getValue('getName');
$this->getValue('getEmail');

ПРИМЕР 1 (РАБОТАЕТ)

private function getValue($method)
{
$o = new Order();
$p = $o->Payment();

return $p->$method();                 // Works
return  $p->call_user_func($method);  // Works
}

ПРИМЕР 2 (НЕ РАБОТАЕТ)

private function getValue($method)
{
return
new Closure(function (Order $o) {
if ($o->getPayment() instanceof Payment) {
return $o->Payment()->$method();                 // Don't Work
return $o->Payment()->call_user_func($method);   // Don't Work
}
});
}

0

Решение

class Test {
public function abc(){
echo "ok";
}
}function getValue($method){
return (function($o) use ($method) {
if ($o instanceof Test) {
return $o->$method();
}
});
}

$m = getValue('abc');
$m(new Test());
1

Другие решения

$o Я думаю, что это неопределенное значение, и, вероятно, вы получили это сообщение об ошибке:

Parse error: parse error, expecting `'&'' or `T_VARIABLE'

это должно работать:

private function getValue($method)
{
return
new Closure(function () {
$o = new Order();
return $o->Payment()->$method();
});
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector