Php 将可调用函数解析为变量而不调用它

Php 将可调用函数解析为变量而不调用它,php,oop,callable,Php,Oop,Callable,我有一个类,它有一个$action变量,它的值是callable。通常,在初始化此值时,我可以执行以下操作: $this->action = function() { echo "My function"; } $this->action(); <?php /** * Resolves an non-callable action */ class ActionResolver { private $action; /** * Act

我有一个类,它有一个
$action
变量,它的值是callable。通常,在初始化此值时,我可以执行以下操作:

$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;
    }
}
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() {};
}
然后,我将通过如下操作调用该函数:

$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;
    }
}
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() {};
}
该类本身如下所示:

$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;
    }
}
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();
使用


老实说,这有点复杂。你能把它归结为一个更简单的例子吗?我真的不能简化它。它只是从一个类方法返回一个可调用的。我最不清楚的是你的三个大代码片段到底是如何结合在一起的。第一个和第二个只是一个类,$action变量就在这个类中。
ActionResolver
使用一个字符串进行实例化,该字符串类似于
MyClass::myMethod
。最后一个代码片段是
ActionResolver
中的
resolveCallable
函数;老实说,这有点复杂。你能把它归结为一个更简单的例子吗?我真的不能简化它。它只是从一个类方法返回一个可调用的。我最不清楚的是你的三个大代码片段到底是如何结合在一起的。第一个和第二个只是一个类,$action变量就在这个类中。
ActionResolver
使用一个字符串进行实例化,该字符串类似于
MyClass::myMethod
。最后一个代码片段是
ActionResolver
中的
resolveCallable
函数;