在PHP中正确实现模型类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PHP中正确实现模型类相关的知识,希望对你有一定的参考价值。
嗨,我想问一下我的模型类的实现是否至少对OOP风格是正确的。我将它声明为抽象,以便它只能用于扩展类
示例代码:
<?php
/**
* class model handles dbconfig and some common query transaction
* i declare it as an abstract so that it can only be used on extending the
*class
*/
abstract class Model
{
//db config
protected $sHost = "localhost";
protected $sUser = "root";
protected $sPass = " ";
protected $sDb = "test";
protected $sEngine = "mysql";
protected $conn ;
//constructor
public function __construct()
{
$this->conn = new mysqli($this->sHost, $this->sUser, $this->sPass , $this->sDb);
}
protected function db_query_list($sSql){
if ($resultset = $this->conn->query($sSql)) {
if ($resultset->num_rows > 0) {
$data = array();
while( $row = $resultset->fetch_assoc() ) {
$data[] = array_change_key_case($row);
}
}else {
$data = false;
}
} else {
$data = false;
}
$resultset->close();
return $data;
}
protected function execute_query($SQL) {
$run = $this->conn->query($this->sEngine);
return $run;
}
}
然后在实现中,我在CustomerModel中扩展模型
<?php
require "Model.php";
class CustomerModel extends Model
{
public function __construct()
{
parent::__construct();
}
public function getAllCustomer()
{
$sSql = "SELECT *
FROM t_classification_header
";
return $this->db_query_list($sSql);
}
}
请注意,我使用parent :: __ construct();.我是OOP的新手任何帮助都是我的荣幸任何意见和建议都是值得欢迎的。谢谢
答案
1)创建分离的类,甚至是单例,用于实际与DB交互并将其作为模型构造函数的参数传递。为什么?如果您与5个客户合作,那么您的代码将创建5个与DB的连接。 (依赖注入/组合)
2)不要做return $this->db_query_list($sSql);
。将结果包裹成一些CustomersList
和/或将每行包裹到Customer
中。
3)我会用Customers($DB)
,all()
等方法创建类byId($id)
而不是CustomerModel
。说真的,我们不是照片代理商,不与模特合作。是的,该类是一个数据模型,但为什么要烦恼这个代码呢?对我们来说,这是一个具体的Customer
,具有特定的数据和行为。
以上是关于在PHP中正确实现模型类的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP + MySQL 中正确实现自定义会话持久化器?