PHP MVC 调用模型在另一个模型中


PHP MVC Call Model in another Model

对不起,如果这个问题已经被问过了,但我想知道在另一个模型 MVC 中导入模型是否正确,或者是否最好在每个模型中执行相同的功能?

现在,在我的库文件夹中的模型中,我添加了与控制器中相同的方法:

class Model
{
    protected function __construct()
    {
        $this->db = new Database;
    }
    public function model($model)
    {
        require_once '../app/models/' . $model . '.php';
        return new $model();
    }
}

在我的模型文件中:

class Exemple_model extends Model
{
    function __construct ()
    {
        parent::__construct();
    }
    public function exemple_function()
    {
        $otherModel = $this->model('urlAnotherModelFile');
        $otherModel->otherMethod();
    }
}

但我不确定这样做是否正确,或者是否是最好的方法。

提前感谢您的回答。

我认为你有点把事情搞混了。

控制器负责创建模型并对其执行方法。您可以将Model类重命名为 BaseModel ,并使每个模型从此BaseModel扩展。

至于包含正确文件的问题,我建议您查看自动加载器:http://php.net/manual/de/function.spl-autoload-register.php。乍一看可能有点令人困惑,但如果看第一个示例,您将很快理解它的要点:基本上,如果您想创建特定类的对象,php 会检查它是否已经知道该类,如果没有,它将执行自动加载器(然后尝试包含包含该类的文件(。一旦您配置了自动加载机,您就可以停止关心包含正确的文件。

由于自动加载器

一开始可能有点混乱,因此这将是您特定用例中的自动加载器:

spl_autoload_register(function ($model) {
    include '../app/models/' . $model. '.php';
});

构建/访问模型之前,您需要将此代码段放在某个位置。其他一切都由 php 完成(它会根据需要自动调用函数,因此调用类似 spl_autoload_register('Comments_model::comments_list'); 之类的东西根本不起作用:)

现在,如果要从模型执行方法,可以执行以下操作:

$otherModel = new otherModel();
$otherModel->otherMethod();

不用担心require或类似,PHP会为您做到这一点。