我使用下面的代码从我的控制器中初始化一个模型:
$this->load->model('model_name');
是否有可能以某种方式修改上述行,使模型构造临危参数? 我想用下面的代码模型构造:
function __construct($param_var) {
parent::Model();
$this->$param_var = $param_var; //I'm not even sure this works in PHP..but different issue
}
这将是非常有益的,这样我可以重用我的模型类。 谢谢。
更新:(从其中一个答案,我原来的问题是solved..thanks!)只是为了解释为什么我要做到这一点:这个想法是能够重用模型类。 因此,基本上以得到一个简单的例子,我想能够一个“ORDER_BY”变量传递给模型类,这样我可以在模型中类重用逻辑(和在SQL动态地改变的顺序逐值),而不必创建一个单独的类或一个单独的函数。
这是糟糕的设计? 如果是的话请您解释一下为什么你不会做这样的事,你会怎么做呢?
我看你这个推理,但我建议在寻找的对象关系映射为你的数据库的需求。 有用户提出的ORM库笨称为DataMapper的 ,我一直在使用最近。 您可以使用表中你的控制器作为对象,它可能是你的问题的一个更好的选择。
你无法通过参数传递load
功能。 你必须做一些事情,如:
$this->load->model('model_name');
$this->model_name->my_constructor('stuff');
在该模型:
function my_constructor($param_var) {
...
}
响应更新:
你可以只通过该ORDER_BY值,当你调用模型功能。 我假设在你的控制器动作,您有类似$this->model_name->get($my_id);
只要你ORDER_BY参数添加到这个功能。 IMO这使得模型的逻辑更灵活的/可重复使用的,因为你正在做的方式,我认为在构造函数将设置为每个函数的ORDER_BY值设置ORDER_BY。
而不是使用的DataMapper我建议使用IgnitedRecord因为该DataMapper的不再保持更多的在它已经被替换成红宝石
在模型
<?php
/* Load Model core model */
/* BASEPATH = D:\xampp\htdocs\ci_name_project\system\ */
include BASEPATH . 'core\\Model.php';
class User_model extends CI_Model {
/* Properties */
private $name;
/* Constructor parameter overload */
public function __construct($name) {
$this->set_name($name);
}
/* Set */
public function set_name($name) {
$this->name = $name;
}
/* Get */
public function get_name() {
return $this->name;
}
}
在控制器
<?php
class User_controller extends CI_Controller {
public function index() {
/* Load User_model model */
/* APPPATH = D:\xampp\htdocs\ci_name_project\application\ */
include APPPATH . 'models\\User_model.php';
$name = 'love';
/* Create $object_user object of User_model class */
$object_user = new User_model($name);
echo $object_user->get_name(); // love
}
}