在其他 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 文件,除非您有自动加载功能。
我正在尝试创建一个用于学习目的的 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 文件,除非您有自动加载功能。