CodeIgniter样式$ this-> modelname-> function()调用

时间:2011-03-28 13:42:58

标签: php classloader

我要做的是通过调用控制器中的$this->model_name->function()来访问CodeIgniter样式的模型。继续我到目前为止所做的事情:

$this->load = new Load();

    foreach (glob("application/models/*.php") as $file) {
        $model = basename($file, ".php");
        $this->$model = new $model;
    }

我知道我不能做我在那里尝试的事情,但希望你能看到我的目标。我想要做的是让PHP为模型文件夹中的每个文件写$this->modelname = new modelname;。我正在抓取所有PHP文件并剥离目录和.php只留下文件名。

如果这很难理解,我很难道歉,很难解释>。<

2 个答案:

答案 0 :(得分:1)

它实际上应该可以工作,你只需要实际包含文件:

foreach (glob("application/models/*.php") as $file) {
    @include_once $file;
    $model = basename($file, ".php");
    if (class_exists($model)) {
        $this->$model = new $model;
    } else {
        //handle error, trow an exception?
    }
}

答案 1 :(得分:1)

为什么不创建自动加载器?

spl_autoload_register('customAutoloader');

function customAutoloader($class_name){
    $file_name = $class_name . ".php";
    //Model
    if(substr($class_name, -5) === "Model"){
        if(is_readable(PATH_MODELS . $file_name)){
            require_once(PATH_MODELS . $file_name);
        }
    }
}

在这种情况下,所有模型类都必须被称为ModelnameModel,文件的名称应该相同 - ModelnameModel.php并且位于PATH_MODELS中。