您好,我想问一下我的模型类的实现是否至少与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的新手任何帮助都是我的荣幸 欢迎提出任何意见和建议。 谢谢
答案 0 :(得分:1)
1)创建分离的类,甚至是单例,实际与DB交互,将其作为模型构造函数的参数传递。为什么?如果您与5个客户合作,那么您的代码将创建5个与DB的连接。 (依赖注入/组成)
2)不要 func application(_ application: UIApplication,
supportedInterfaceOrientationsFor window: UIWindow?) ->
UIInterfaceOrientationMask {
if let rootViewController = UIApplication.topViewController() {
if rootViewController is PostImageZoomViewController {
let controller = rootViewController as!
PostImageZoomViewController
if controller.isPresented {
return .all
}
}
}
return .portrait
}
。将结果包装到某些return $this->db_query_list($sSql);
和/或将每行包装到CustomersList
。
3)我会使用方法Customer
,Customers($DB)
等创建课程all()
,而不是byId($id)
。说真的,我们不是照片代理商,不与模特合作。是的,该类是一个数据模型,但为什么要烦恼这个代码呢?对我们来说,这是一个具体的CustomerModel
,具有特定的数据和行为。