将可调用对象解析为变量而不调用它

Resolving a callable into a variable without calling it

我有一个 class,它有一个 $action 变量,它的值是一个可调用对象。通常,在初始化这个值时,我可以这样做:

$this->action = function() {
   echo "My function";
}

然后我会通过执行以下操作来调用该函数:

$this->action();

class本身是这样的:

<?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变量的结果来解析。这个方法在ActionResolverclass。该方法如下所示:

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() {};
}

方法和 class 由从 $results 变量中获取的字符串解析。 class 和方法名称均有效且有效。

当我尝试调用它时,它 return 是方法的 return 值,而不是方法本身。

如何在不调用方法的情况下 return 方法本身而不是方法的内容?

只是 return 值。

改为

    return $class->$method();

使用

    return $class->$method;