在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中正确实现模型类的主要内容,如果未能解决你的问题,请参考以下文章

如何在python的类中正确实现辅助函数

如何在 PHP + MySQL 中正确实现自定义会话持久化器?

如何在 GWT Web 应用程序中正确实现 DAO?

ios - 如何在 ios swift 中正确实现后台获取

如何在我的 for 循环中正确实现睡眠功能? (Ubuntu)

如何以模板类作为模板参数在模板类中正确定义模板函数