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
函数;