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

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判断函数是否被定义的方法

    如果你想判断函数是否被定义,可以使用PHP内置函数 function_exists()。这个函数可以判断指定函数名是否已经被定义。如果函数已经被定义,那么返回true,否则返回false。 下面是一个示例代码,展示如何使用 function_exists() 判断指定函数是否被定义: if (function_exists(‘test’)) { echo &…

    PHP 2023年5月27日
    00
  • 第四章 php数学运算

    第四章 PHP数学运算完整攻略 1. 基本数学运算 PHP中的基本数学运算包括加减乘除、取余数、求幂等操作,这些操作都使用了常见的数学符号。例如:+是加号,-是减号,*是乘号,/是除号,%是取余符号,**是求幂符号。下面是这些操作的具体示例: // 加减乘除 $a = 10; $b = 5; $c = $a + $b; // 15 $c = $a – $b;…

    PHP 2023年5月23日
    00
  • 浅谈PHP设计模式的注册树模式

    简介: 注册树模式,属于结构型的设计模式。一种很简单的设计模式 适用场景: 类似IOC。写一个庞大的类库的时候,为了方便各种资源的归纳,可以统一放到一棵树上。 优点: 把一个个游兵散将一样的对象进行统一管理。 另外可以根据项目的业务场景自定义层级。 缺点: 增加项目的复杂性。 纯粹的注册树写法,缺少单例模式的有点,可能存在重复创建对象的可能,需要做额外的验证…

    PHP 2023年4月18日
    00
  • php中mysql连接和基本操作代码(快速测试使用,简单方便)

    这里是关于“php中mysql连接和基本操作代码”的完整攻略。 MySQL连接代码 在PHP中连接MySQL需要使用到PHP内置的MySQLi扩展或PDO扩展。这里我们以MySQLi扩展为例来介绍。 创建数据库连接 <?php $servername = "localhost"; $username = "username…

    PHP 2023年5月23日
    00
  • 关于二级目录拖拽排序的实现(源码示例下载)

    首先,需要先说明一下什么是二级目录拖拽排序。这是指在一个树形结构的目录中,除了根节点之外还有一层节点,这些节点是可以拖拽进行排序的。 在实现二级目录拖拽排序时,需要注意以下几点: 确定数据结构 需要确定存储每个节点数据的数据结构,常见的是使用树形结构(包含根节点和子节点)或者数组结构(将每个节点的父子关系以及排序位置都存储在一个数据对象中)。 使用拖拽事件 …

    PHP 2023年5月23日
    00
  • 详解用vue.js和laravel实现微信支付

    以下是详解用Vue.js和Laravel实现微信支付的完整攻略: 1. 前期准备 首先我们需要准备一些前期工作,包括: 注册微信支付账号,获取appid、商户号、支付秘钥等信息,以及生成API密钥证书; 安装Laravel框架,创建项目并安装必要扩展库; 安装Vue.js框架,创建项目并安装必要依赖库。 2. 后端实现 在Laravel项目中,配置微信支付的…

    PHP 2023年5月23日
    00
  • PHP伪静态写法附代码

    PHP伪静态写法是一种常见的优化方式,可以为网站提高SEO效果、增加用户体验、提高网站访问速度等。下面我将为大家详细讲解PHP伪静态写法的完整攻略,包含以下部分: 了解伪静态的概念和作用 选择伪静态的方式 开始进行伪静态的设置 对伪静态进行测试和调试 了解伪静态的概念和作用 伪静态是指利用URL重写规则,将网站URL中的动态参数隐藏起来,让URL看起来更加友…

    PHP 2023年5月23日
    00
  • Redis实现分布式锁的实例讲解

    Redis实现分布式锁的完整攻略 1. 什么是分布式锁 在分布式系统中,由于多个进程/线程访问同一资源,我们需要一种机制来保证各个进程/线程之间依次互斥地访问,避免出现资源竞争、数据混乱等问题。这种机制就被称为分布式锁。 2. Redis如何实现分布式锁 2.1 setnx和expire实现分布式锁 Redis提供了setnx命令,用于设置一个键值对,如果该…

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