У меня есть класс, который имеет $action
переменная, которая принимает вызываемый в качестве значения. Обычно при инициализации этого значения я могу сделать что-то вроде этого:
$this->action = function() {
echo "My function";
}
Затем я бы вызвал функцию, выполнив что-то вроде этого:
$this->action();
Сам класс выглядит так:
<?php
/**
* Resolves an non-callable action
*/
class ActionResolver
{
private $action;
/**
* Action constructor.
*
* @param string $action
*/
public function __construct($action)
{
$this->action = $action;
}
public function resolve()
{
$actionResolver = new ActionResolver();
$results = ...
$this->action = $actionResolver->resolveCallable($results);
}
/**
* @return callable
*/
public function getAction()
{
return $this->action;
}
}
в resolveCallable()
функция, действие должно быть разрешено методом другого объекта по результатам $results
переменная. Этот метод в ActionResolver
учебный класс. Метод выглядит так:
public function resolveCallable(array $results)
{
$class = $results[0];
$method = null;
if (isset($results[1])) {
$method = ...
}
$object = new $class;
if (!is_null($method)) {
return $class->$method();
}
return function() {};
}
Метод и класс get разрешаются строкой, взятой из $results
переменная. Имя класса и метода являются действительными и работают.
Когда я пытаюсь вызвать это, он возвращает возвращаемое значение из метода, но не сам метод.
Как я могу вернуть сам метод вместо содержимого метода, не вызывая его?
Просто верните значение.
Вместо
return $class->$method();
использование
return $class->$method;
Других решений пока нет …