2016-10-21 30 views
1

我使用自己的路由引擎创建了自己的MVC框架。 当我打电话给一个页面,我的URL是这样的:http://www.domain.com/lang/controller/method/PHP调用字符串中的静态函数

一切都可以用这个配置,但是当我通过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

这是非常清楚..你的方法被称为'ConnectUser'和你的行动只是'Connect' –

+0

这是一个错误,当我复制粘贴我的代码。 :) – Vincent

回答

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