【问题标题】:PHP Call static function in stringPHP调用字符串中的静态函数
【发布时间】:2016-10-21 13:25:34
【问题描述】:

我正在使用自己的路由引擎创建自己的 MVC 框架。 当我调用一个页面时,我的 URL 是这样的: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()'

你对我的问题有什么想法吗?

【问题讨论】:

  • 很清楚..你的方法叫ConnectUser,你的动作只有Connect
  • 复制粘贴代码时出错。 :)

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    相关资源
    最近更新 更多