在 PHP 中创建 DAO 的正确方法

Posted

技术标签:

【中文标题】在 PHP 中创建 DAO 的正确方法【英文标题】:Proper way to create a DAO in PHP 【发布时间】:2012-06-18 20:58:44 【问题描述】:

从 OOP 的角度来看,在 php 中创建 DAO(数据访问对象)的正确方法是什么?

例如(以 Account 为例),我的 AccountDAO 将具有以下一些功能:

GetAllAccounts GetAccountByID UpdateAccount DeleteAccount InsertAccount

所以,一旦我获取了数据库中的所有帐户,我应该将它们作为帐户对象数组返回给调用者吗?我应该只返回 mysql 结果集吗?

你知道任何好的 DAO 例子吗?

【问题讨论】:

【参考方案1】:

你在构建 DAO 的正确轨道上:你列出的方法绝对应该是 DAO 的一部分。

为了回答您的具体问题,DAO 不应泄露任何特定于数据库的对象,它可能会泄露一些数据库概念,只要它们不是特定于数据库供应商的。

所以不,您不应该返回 MySQL 结果集。但是您可以创建一个包含 MySQL 结果集的通用结果集,并且可以使用更高级别的概念(提取整个对象而不是提取列)。

编辑:我的目的不是引导您实际构建结果集包装器,您也可以像最初建议的那样简单地返回一个对象数组。这只是一个例子。

【讨论】:

很酷,谢谢,我在 ASP 领域做过一些此类工作,但迄今为止我所有的 PHP 脚本都是基本的过程脚本。我正在尝试将我的 php 应用程序变成 oop php 应用程序。 "在 DAO 中,你不应该返回 MySQL 结果集。但是你可以创建一个通用的结果集。" 这不是 Repository 的工作吗?返回通用对象【参考方案2】:

为此,您可以创建一个包含 3 个方法的类,一个是创建与数据库的连接,第二个是关闭连接,第三个是执行 SQL 查询

<?php
class Database

    public function con_open()
        $con = mysql_connect("domain","username","password");
            if (!$con)
            
                die('Could not connect: ' . mysql_error());
            
        mysql_select_db("db_name", $con);
    

    public function query($sql)
        $result = mysql_query($sql);
            if(!$result)

            else      
                    return $result;
                
    

    public function fetch($result)
        $row = mysql_fetch_array($result);
        return $row;
    

    public function con_close()
         mysql_close($con);
    



$db = new Database();

?>

希望对你有帮助

【讨论】:

您不仅不应使用mysql_* 扩展名,而且您的示例不允许在不明确更改代码的情况下更改连接详细信息。 我认为 OP 正在寻找 DAO(用于访问数据库中的一个特定表),而不是 Database 类。

以上是关于在 PHP 中创建 DAO 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中创建 RTF 文件的正确方法是啥?

在 Java 中创建日期的正确方法是啥? [复制]

在laravel中创建一个辅助系统是否正确?

在 Twitter Bootstrap 中创建圆角的正确方法

在 kotlin 中创建泛型类的新实例的正确方法是啥?

在 C++ 中创建全局“常量”的正确方法