2012-11-13 178 views
1

我正在修改我的PHP框架并试图找出一种更简单的方法来处理不同的请求类型。我可以使用函数作为函数的名称吗?

目前我有一个控制器方法

$methodHandler = self::getMethodHandler(__FUNCTION__); 
$this->$methodHandler(); 

哪里getMethodHandler是

protected static function getMethodHandler($function) { 
    return $function."_".ucwords(strtolower(Request::getMethod())); 
} 

理想我想,以减少两行之一,但PHP是不是该嵌段它

$this->self::getMethodHandler(__FUNCTION__)(); 

无论如何,我能做到这一点?

+0

您使用的是什么版本的PHP? – Mario

+0

可能frpm php-5.4上。 – arkascha

回答

1

这应该工作:

$this->{self::getMethodHandler(__FUNCTION__)}(); 

这将评估self::getMethodHandler(__FUNCTION__),并调用结果为$this的方法。

+0

非常感谢!我试过包装(),没有想到{}。有没有任何名字可以包裹在{}中,我想研究一下。 –

+1

@MattVotsikas它被称为插值。它通常在这样的字符串使用'“var值是$ VAR”'或'“\ $这个 - > var为{$这个 - > VAR}”',但相同的概念适用字符串之外的东西时,被包裹在大括号。另一个例子是调用一个带有数字的函数,比如'{“function_ $ i”}()'。如果$ i是2,那会调用'function_2'。 –

相关问题