PHP在字符串中调用静态函数

时间:2016-10-21 13:25:34

标签: php function model-view-controller static call

我正在使用自己的路由引擎创建自己的MVC框架。 当我调用页面时,我的网址就是:http://www.domain.com/lang/controller/method/

使用此配置一切正常,但是当我通过POST发送参数时,我希望它们在我的函数声明中。 例如:
函数$_POST => Array ( [login] => myLogin, [pwd] => myPassword)

ConnectUser($login, $password).

我的控制器是一个单身人士。所以,我的函数调用是这样的:\core\controller\UserController::getInstance()->ConnectUser($login, $password).

我用字符串生成我的调用。当我做的时候

$funcCall = $strCall . "::getInstance()->" . $_GET['action'] . "()";
forward_static_call_array($funcCall, $_POST);

我收到此错误:

forward_static_call_array() expects parameter 1 to be a valid callback,
class 'core\controller\UserController' does not have a method 'getInstance()->Connect()'

你对我的问题有所了解吗?

1 个答案:

答案 0 :(得分:1)

  1. "core\controller\UserController::getInstance()->Connect()"不是有效的回调

  2. 您应该使用call_user_func_array()代替forward_static_call_array(),因为您没有调用静态方法 (即使您可能不是,也不是从一个重要的上下文中调用它们。

  3. $_POST不会按名称神奇地映射到方法的参数。你必须使用反射。请参阅Passing named parameters to a php function through call_user_func_array