简体   繁体   中英

How can I use proper object-oriented models in CodeIgniter with constructors?

The way I create CodeIgniter models at the moment is (ie no constructor, having to pass userID all the time and limited to one object):

$this->load->model('User');
$this->user->set_password($userID, $password);

But I would like to do it like this:

$this->load->model('User');
$User = new User($userID);
$User->set_password($password);

UPDATE: Perhaps just a user model was a poor example.

For instance, if I have a shopping list that has various items I would like to use PHP in this way:

$this->load->model('List');
$this->load->model('Item');

$List = new List();
$items[] = new Item($itemName1, $itemPrice1);
$items[] = new Item($itemName2, $itemPrice2);

$List->add_items($items);

CodeIgniter feels fundamentally broken in handling PHP OO in this way. Does anyone have any solutions that can still use the superobject within every model?

You can do it like you normally would:

require_once(APPPATH.'models/User.php');
$User = new User($userID);

Or, you can rely on a table-level model to return a record-level model:

$this->load->model('users_model'); // users (plural) is the table-level model
$User = $this->users_model->get_user($userID);

Meanwhile, in users_model

require_once(APPPATH.'models/User.php');

public function get_user($userID)
{
  // get a record from the db
  // map record to model
  // return model
}

你可以subclass模型或只是在constructor添加一些东西我认为你需要调整代码来按照你想要的方式来做...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM