gpt4 book ai didi

codeigniter - Codeigniter 模型中的面向对象方法

转载 作者:行者123 更新时间:2023-12-04 08:25:51 30 4
gpt4 key购买 nike

我一直想知道在模型中以 OO 风格编写代码的正确方法是什么。当然,您可以拥有一个从数据库中检索数据然后映射到模型级变量的函数。但是,当您在模型中有其他功能试图从 BD 获取其他数据时,这种方法会变得违反直觉。例如:

class User extends CI_Model {
$id, $name, $age .... ;

public function get_user_from_db_with_id($id) {
...
// get data and map to variable.
}

public function get_all_users() {
// return all users in db
}

}

Controller 中的某处:
$user = new User();
$ben = $user->get_user_from_db_with_id($id);

// this does not make sense!!
$all_user = $ben->get_all_users();

有什么想法或评论吗?

提前致谢!

最佳答案

我不得不做出类似的决定并选择了这个(为清楚起见进行了修剪)

class UserModel extends MY_Model 
{

public $UserID = 0;
public $CustomerID = null;
public $FirstName = '';
public $LastName = '';
public $EmailAddress = '';
public $Password = null;
public $UserGroupID = true;

function __construct()
{
parent::__construct();
}

private function get($id)
{
$row = $this->get($id);
if ($row !== null)
{
$this->dbResultToObject($row, $this);
}
}

// Return an array of User objects
public function get_list($deleted = false, $userIDToInclude = null)
{
$params = array(null, $deleted, $userIDToInclude);
$query = $this->db->call("spUserGet", $params);

$users = array();
foreach ($query->result() as $row)
{
$user = new UserModel();
$this->dbResultToObject($row, $user);
$users[] = $user;
}

return $users;
}

// Other Methods (Validate, Save etc)
}

我混合使用公共(public)、 protected 和私有(private)属性,以便我编写的将属性从 DB 结果映射到 DB sproc 调用的反射代码只包含公共(public)属性并防止发送太多参数。但这已经离题了,所以我的 Controller 看起来像:
class Users extends MY_Controller 
{

public function __construct()
{
parent::__construct();
$this->load->model('UserModel', 'user');
}

....

}

然后可以使用检索列表
$users = $this->user->get_list();

和一个单一的记录
$user = $this->user->get($userID);

关于codeigniter - Codeigniter 模型中的面向对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21173855/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com