很抱歉,如果已经回答了这个问题,我是PHP的新手。我正在尝试构建一个用于教育和测试目的的mvc,并增加我对它的了解。我陷入了困境,无法弄清楚。我确信这是一个简单的解决方案,但我不知道正确的术语/单词是什么样的。
如果答案已经存在,请告诉我。
以下是我要做的事情:
class Load {
public function __construct(){
}
public function model($file_name){
include($file_name.'.php');
}
}
class Home_model extends M_F_Model{
function __construct() {
parent::__construct();
}
public static function test_this_model($var){
$result = $var.'+2';
return $result;
}
}
class M_F_Controller {
public $load;
public function __construct(){
$this->load = new Load();
}
}
class Home extends M_F_Controller{
function __construct(){
parent::__construct();
$this->load->model('home_model');
}
function index($var){
$result = Home_model::test_this_model($var);
return $result;
}
}
我想将Home_model::test_this_model();
转换为$this->home_model->test_this_model();
,而不必在home_model
类中声明我可能希望将来包含的每个类的Home
实例,并避免使用静态函数。
在此先感谢您,如果您需要任何进一步的信息,请与我们联系。
答案 0 :(得分:1)
是否存在以下问题:
$this->home_model = $this->load->model('home_model');
在Home的构造函数内部,然后修改加载器类的model
函数以返回一个新实例而不是仅包含该文件?类似的东西:
public function model($file_name) {
include $file_name . '.php';
$model = new $file_name();
return $model;
}
(这假设$file_name
对应于文件内的类名)
答案 1 :(得分:1)
如果你正在从CodeIgniter学习MVC和OOP,那么你做错了™。在你有更高级的理解或OOP之前,你甚至不应该触及MVC模式,因为它非常复杂,需要你理解诸如LoD,SoC,IoC等所有内容。 SOLID principles
模型不是类或对象。这是一层。 MVC模式由两层组成:模型层和表示层。表示层主要由视图,控制器和模板组成,它提供用户界面并处理用户与其交互的方式。
控制器应该负责根据用户的输入改变模型层的状态和当前视图。不适用于创建对象和渲染模板。他们不应该退货。
控制器中的基本工作流程应为:
答案:除非您想将每个控制器绑定到特定结构,否则您需要两行来处理模型层。
您认为“模型”实际上是domain objects,它们是模型层的一部分。你真的不应该直接访问它们,但是刚刚开始学习MVC模式的人通常会这样做。我怀疑对于你当前的级别,this answer会提供最大的好处,但这并不是我理解MVC模型的方式。对于高级版本read this。
另外,手动加载每个类是非常过时的做法。从PHP 5.1开始,我们有spl_autoload_register()
,当您尝试使用未知类时,可以创建一个共享自动加载器。