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

时间:2015-07-13 05:23:00

标签: php model-view-controller call classnotfound

我正在尝试为学习目的创建MVC框架。

所以,我试图通过阅读URL来调用正确的类和操作。但是,我在使用call_user_func功能时遇到了麻烦。

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

显然班级没有加载,这就是我的问题。我怎么能在这里调用它? 我有一个命名空间,但我不知道它是否对某些东西有用。

这是代码

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 Framework,但只有类名,文件夹等。

那么,任何想法?我忘记了信息?

谢谢

修改 这是我在Bitbucket上的回购链接。我认为它可以下载。 Bitbucket

1 个答案:

答案 0 :(得分:0)

call_user_func的签名是:

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

param 1是可调用的

param 2..n是参数

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

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

array($object, $method)

所以在你的例子中:

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

如果您的控制器位于名称空间App \ Controller中,那么 $ this-> params [' Controller'] 的值必须为App \ Controller \ ClassName。

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