PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析

yizhihongxing

PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析

背景

在开发的过程中,我们通常需要用到数据持久化,也就是将应用程序数据存储到数据库中。这时候,我们就需要用到访问数据库的相关代码。但是,直接将数据库操作的代码写在应用程序中会导致代码耦合度高、代码冗长等问题。因此,我们需要一种将数据库操作和应用程序解耦的方式来提高代码的可读性、可维护性和可扩展性,而数据访问对象模式(DAO)便是一种解决方案。

数据访问对象模式(DAO)介绍

数据访问对象(DAO)模式是一种将数据访问和业务逻辑分离的设计模式。它将数据访问与底层数据存储技术分离开来,从而为访问数据库的代码提供了一种抽象和简单的方式。

DAO模式包含以下几个角色:

  • 数据访问对象接口(DAOInterface):定义操作数据库的方法,是其它DAO实现的标准规范;
  • 数据访问对象实现类(DAOImpl):实现DAOInterface接口中定义的方法,执行具体的数据库操作;
  • 模型类(Model):表示数据在应用程序中的具体表现形式;
  • 数据库连接(DBConfig):定义数据库连接参数,与DAOImpl实现类构成一个整体。

DAO模式的优点有:

  • 简化代码结构,提高代码重用性。
  • 降低业务逻辑与数据访问的耦合度,方便修改和维护。
  • 利用继承或实现接口的方式,实现代码的可扩展性和灵活性,方便增加数据库的类型和访问方式。

DAO模式的实现

在PHP中,DAO模式可以用以下步骤来实现:

  1. 创建DAOInterface接口,定义必须实现的数据库操作方法
interface DAOInterface {
    public function findAll();
    public function findById($id);
}
  1. 创建DAOImpl实现类,实现DAOInterface接口中定义的方法,并连接数据库
class UserDaoImpl implements DAOInterface {
    private $conn;
    public function __construct() {
        $this->conn = mysqli_connect('localhost', 'root', 'password', 'database_name');
    }
    public function findAll() {
        $users = array();
        $sql = "SELECT * FROM user";
        $result = mysqli_query($this->conn, $sql);
        while ($row = mysqli_fetch_assoc($result)) {
            $user = new User($row['id'], $row['name'], $row['email']);
            $users[] = $user;
        }
        mysqli_free_result($result);
        mysqli_close($this->conn);
        return $users;
    }
    public function findById($id) {
        $sql = "SELECT * FROM user WHERE id=$id";
        $result = mysqli_query($this->conn, $sql);
        $row = mysqli_fetch_assoc($result);
        $user = new User($row['id'], $row['name'], $row['email']);
        mysqli_free_result($result);
        mysqli_close($this->conn);
        return $user;
    }
}
  1. 创建模型类,表示数据在应用程序中的具体表现形式
class User {
    private $id;
    private $name;
    private $email;
    public function __construct($id, $name, $email) {
        $this->id = $id;
        $this->name = $name;
        $this->email = $email;
    }
    public function getId() {
        return $this->id;
    }
    public function getName() {
        return $this->name;
    }
    public function getEmail() {
        return $this->email;
    }
}
  1. 创建数据库连接,定义连接参数
class DBConfig {
    const HOST = "localhost";
    const USERNAME = "root";
    const PASSWORD = "password";
    const DATABASE = "database_name";
}

DAO模式的用法实例分析

下面通过两个实例来演示DAO模式的使用。

实例一:查询所有用户信息

require_once 'models/User.php';
require_once 'dao/DAOImpl.php';
require_once 'dao/DAOInterface.php';

$userDao = new UserDaoImpl();
$users = $userDao->findAll();
foreach ($users as $user) {
    echo "ID:" . $user->getId() . "<br/>";
    echo "Name:" . $user->getName() . "<br/>";
    echo "Email:" . $user->getEmail() . "<br/>";
    echo "<hr/>";
}

执行上述代码,即可输出所有用户的信息。

实例二:根据ID查询用户信息

require_once 'models/User.php';
require_once 'dao/DAOImpl.php';
require_once 'dao/DAOInterface.php';

$userDao = new UserDaoImpl();
$user = $userDao->findById(1);
echo "ID:" . $user->getId() . "<br/>";
echo "Name:" . $user->getName() . "<br/>";
echo "Email:" . $user->getEmail() . "<br/>";

执行上述代码,即可输出ID为1的用户信息。

总结

关于数据访问对象模式(DAO),本文从概念、原理到实战均有详细介绍。希望本文能够对读者理解DAO模式,提升编程效率,缩小代码耦合度有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • PHP使用流包装器实现WebShell的方法

    使用流包装器可以将任意的输入/输出以流的形式统一处理,包括文件、网络等。利用这种特性,可以使用PHP实现WebShell的功能,也就是通过Web界面控制目标服务器的命令执行。 准备工作 在使用流包装器实现WebShell功能之前,需要了解以下知识点。 流包装器 命令执行 shell命令的输出和错误信息 实现流程 设置表单,获取用户输入的命令 利用stream…

    PHP 2023年5月26日
    00
  • 微信小程序webview实现长按点击识别二维码功能示例

    微信小程序webview实现长按点击识别二维码功能需要通过以下步骤: 设置webview加载的页面中的meta标签 在webview加载的页面中,需要添加以下的meta标签,用于设置页面不缩放: <meta name="viewport" content="width=device-width, initial-scale…

    PHP 2023年5月23日
    00
  • php实现搜索一维数组元素并删除二维数组对应元素的方法

    实现搜索一维数组元素并删除二维数组对应元素的方法,可以分为以下几个步骤: 定义一个一维数组,存储需要搜索的元素; 定义一个二维数组,存储需要删除对应元素的数组; 使用foreach循环遍历二维数组,对每个子数组使用array_search函数搜索一维数组中是否存在对应元素; 如果存在对应元素,则使用unset函数删除该子数组; 循环结束后,获得删除后的二维数…

    PHP 2023年5月26日
    00
  • PHP查找一列有序数组是否包含某值的方法

    PHP查找一列有序数组是否包含某值的方法主要有两种,分别是二分查找和数组函数in_array。 二分查找 原理 二分查找是一种效率较高的查找算法,在有序数组中查找某个元素,每次将查找区间缩小一半,直到查找到该元素或查找区间为空。具体实现可以采用递归或循环的方式。 代码示例 以下是基于循环实现的二分查找代码: function binary_search($a…

    PHP 2023年5月26日
    00
  • php array_slice函数的使用以及参数详解

    PHP array_slice 函数的使用以及参数详解 在 PHP 中,array_slice 函数可以用来获取数组的一部分,并返回这部分内容的新数组。 基本语法 array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array 参数…

    PHP 2023年5月26日
    00
  • PHP中递归的实现实例详解

    PHP中递归的实现实例详解 什么是递归 递归是一种解决问题的方法,它将问题分解为更小的子问题,直到问题的规模小到可以被直接处理。递归通常涉及函数调用自身。 PHP中递归的基本实现 在PHP中,递归可以通过函数调用自身来实现。下面是一个简单的例子。 function recursion($num) { if ($num <= 0) { return; }…

    PHP 2023年5月27日
    00
  • PHP写日志的实现方法

    下面我来详细讲解”PHP写日志的实现方法”的完整攻略。 1. 什么是日志? 在计算机世界里,日志是记录事件的文件或条目。它可以为您提供有关您的应用程序的有价值的信息和统计数据,从而帮助您确定您的应用程序发生了什么情况。 2. 为什么需要PHP写日志? 在PHP开发中,写日志是非常重要的,因为您永远不知道在您的应用程序中会出现哪些问题。日志可以记录问题并帮助您…

    PHP 2023年5月27日
    00
  • 微信视频号怎么开小游戏直播?微信视频号开小游戏直播教程

    下面我会对“微信视频号怎么开小游戏直播?微信视频号开小游戏直播教程”进行详细讲解,包括以下几个方面: 1.了解微信小游戏和微信视频号2.获取小游戏开发者ID3.创建小游戏直播4.将小游戏直播分享到微信视频号频道5.示例说明 1.了解微信小游戏和微信视频号 在进入教程之前,我们先来了解一下微信小游戏和微信视频号。 微信小游戏是一款基于微信平台的小型游戏,可以在…

    PHP 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部