2016-10-21 29 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