Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从加载程序调用控制器的各种方法_Php_Oop_Model View Controller_Controller_Loader - Fatal编程技术网

Php 从加载程序调用控制器的各种方法

Php 从加载程序调用控制器的各种方法,php,oop,model-view-controller,controller,loader,Php,Oop,Model View Controller,Controller,Loader,我正在尝试构建一个加载器,以在控制器中加载各种控制器及其方法(根据需要)。我在我的主控制器上草拟了一个简单的代码来调用LeftController(现在是一个虚拟控制器,但我打算将此控制器用作菜单) 这在HomeController中起作用。它加载LeftController控制器并显示方法索引() 基于以上代码的加载程序,这就是我到目前为止所做的 class Loader { public function controller($controller) {

我正在尝试构建一个加载器,以在控制器中加载各种控制器及其方法(根据需要)。我在我的主控制器上草拟了一个简单的代码来调用LeftController(现在是一个虚拟控制器,但我打算将此控制器用作菜单)

这在HomeController中起作用。它加载LeftController控制器并显示方法索引()

基于以上代码的加载程序,这就是我到目前为止所做的

class Loader
{

    public function controller($controller)
    {
        $file = 'controller/' . $controller . '.php';
        $class = $controller;

        if (file_exists($file)) {
            require($file); // require 'controller/LeftController.php';
            $controller = new $class(); //$LeftController = new LeftController();

            var_dump($controller);
        }
    }
}
这也起作用,控制器被实例化。我使用var_dump()看到结果

现在,我需要调用该方法,正如我们在最上面的代码
$LeftController->index()中看到的那样但是这次在Loader类上

一种方法是在
$controller=new$class()之后添加
$controller->index()
但这将始终调用控制器的index()方法


如何将此方法部分编码为可以调用与控制器关联的任何方法,而不仅仅是index()。

您可以将方法参数传递给控制器:

public function controller($controller, $method)
然后在新创建的对象上调用它:

$controller->$method()

但是

看来你在试图重新发明轮子。用于验证某个文件是否存在、是否包含该文件并实例化该类的部分称为

代码可能如下所示:

public function controller($controller, $method)
{
    $instance = new $controller();
    return $instance->$method();
}
而自动加载部分则利用来管理查找和包含文件

函数的作用是:注册任意数量的自动加载器,使类和接口在当前未定义时能够自动加载

因此,您可以使用已有的代码,并从实例化类的操作中将其抽象出来:

spl_autoload_register(function autoloader($controller) {
    $file = 'controller/' . $controller . '.php';
    if (file_exists($file)) { require($file); }
});
这太宽了。
spl_autoload_register(function autoloader($controller) {
    $file = 'controller/' . $controller . '.php';
    if (file_exists($file)) { require($file); }
});