对不起,如果这个问题已经被问过了,但我想知道在另一个模型 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会为您做到这一点。