在其他 class (call_user_func) 中调用一个 class

Call a class within other class (call_user_func)

我正在尝试创建一个用于学习目的的 MVC 框架。

因此,我正在尝试通过阅读 URL 调用正确的 class 和行动。但是,我在使用 call_user_func 函数时遇到了麻烦。

我已经阅读了URL,并设置了控制器和动作名称,但我无法调用它。当我使用 运行 call_user_func 函数时,出现以下错误:Fatal error: Class 'PageController' not found in...

显然 class 没有加载,这是我的问题。我怎样才能让它在这里被调用? 我有一个命名空间,但我不知道它是否有用。

这是代码

namespace Core\Dispatcher;

use Core\Routing\Router;

class Dispatch {

    private $params = [];

    public function dispatch()
    {
        $this->getParams();

        /*error occurs here*/ call_user_func(new $this->params['Controller'], $this->params['Action']);
    }

    private function getParams()
    {
        $this->params = Router::read();
    }
}
/*
 * Router::read reads url and return an array with Controller and Action names
 */

是的,全部基于 CakePHP 框架,但只有 class 名称、文件夹等

那么,有什么想法吗?我忘记了信息?

谢谢

编辑 这是我在 Bitbucket 上的回购协议 link。我认为这是启用下载。 Bitbucket

call_user_func的签名是:

 mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )

参数 1 是可调用的

param 2..n为参数

所以你在这里做的是尝试调用对象本身,并将操作作为参数。那不行。

为了调用对象函数,callable 必须采用

格式
array($object, $method)

所以在你的例子中:

call_user_func(array(new $this->params['Controller'], $this->params['Action']));

如果您的控制器在命名空间 App\Controller 中,则 $this->params['Controller'] 必须具有值 App\Controller\类名.

此外,您需要包含具有 class 定义的相应 php 文件,除非您有自动加载功能。