将可调用对象解析为变量而不调用它
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
变量的结果来解析。这个方法在ActionResolver
class。该方法如下所示:
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;
我有一个 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
变量的结果来解析。这个方法在ActionResolver
class。该方法如下所示:
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;