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


Posted in PHP onDecember 12, 2019

本文实例讲述了PHP设计模式之数据访问对象模式(DAO)原理与用法。分享给大家供大家参考,具体如下:

这个数据访问对象模式主要就是描述了如何创建透明访问数据源的对象,这种设计模式对于同时学过PHP和MySQL的人来说,是一个全新的和令人兴奋的概念,并且这种设计模式的目的就是为了解决重复与数据源抽象化这两种特定的问题。

我们可以先创建一个数据访问对象设计模式的对象,这个数据访问对象封装了创建sQL调用、减少实例创建的复杂性和重复以及更新进程的智能方式,并且,这个数据访问对象的使用者不会知道实际使用的表结构和数据库引擎,此外,这个对象应用的方法应当使用逻辑参数,并且应处理SQL语句的创建工作。

数据访问对象模式的额外优点是提供数据库抽象层,现在,应用程序的主要处理代码不再需要考虑数据库引擎或表关系,调用这种对象的公共方法会返回任何数据类型,并且不用考虑内在SQL需要的类型。

然而,管理数据访问对象类中简单性的一个好办法是创建父-子关系。

首先,创建一个基本的父对象。这个对象应当负责数据库连接、抽象地执行查询以及与子对象通信。使用数据访问对象设计模式时,最好开始就将一对一关系的子类与数据库中的表相关联。

并且,这些子类具有必不可少的信息,如表名和主键。此外,子类可能包含一些特定的公共方法,这些方法通过只对子类有意义的方式执行父类的查询。

例如,名为userAddress的子类可能包含一个getAddreddesByZip()方法。将该方法放入父DAO类是毫无逻辑意义的,并且会破坏这个父类希望实现的抽象性。

处理引用特定数据库信息的实体时,最好的做法是创建一个数据访问对象。

了解了上述内容之后,我们就来看下网上所有文章都会有的案例,场景如下:

  1. 设计一个BaseDao基类,实现数据库操作基本的一些query,insert,update方法
  2. 在实际使用的过程中,继承BaseDao,就可以直接调用基类的数据库操作方法

代码如下:

BaseDao.php

<?php
//数据访问对象模式
//将数据库访问层脱离出来 作为公用的访问接口,方便用户开放,是php中常用的一种设计模式
class BaseDao {
    private $db;
    public function __construct($config) {
        $this->db = mysql_connect($config['user'], $config['pass'], $config['host']);
        mysql_select_db($config['database'], $this->db);
    }
    public function query($sql) {
        return mysql_query($sql, $this->db);
    }
}
//UserDao 用户数据表的数据操作,继承BaseDao
<?php
include("UserDao.php");
class UserDao extends BaseDao {
    public function addUser() {
        $sql = "INSERT INTO user (username) VALUES ('initphp')";
        return $this->query($sql);
    }
}
$UserDao = new UserDao;
$UserDao->addUser();

好啦,本次记录就到这里了。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
如何删除多级目录
Oct 09 PHP
用PHP和ACCESS写聊天室(六)
Oct 09 PHP
FCKeditor添加自定义按钮
Mar 27 PHP
PHP简单系统查询模块代码打包下载
Jun 07 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
php 进度条实现代码
Mar 10 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
浅析php数据类型转换
Jan 09 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
PHP导入导出Excel代码
Jul 07 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
Dec 12 #PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 #PHP
PHP学习记录之常用的魔术常量详解
Dec 12 #PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 #PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 #PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 #PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 #PHP
You might like
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
php二维数组排序详解
2013/11/06 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
php intval函数用法总结
2019/04/14 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
js 字符串转化成数字的代码
2011/06/29 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
JS简单计算器实例
2015/01/20 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
python中函数默认值使用注意点详解
2016/06/01 Python
wxpython实现图书管理系统
2018/03/12 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
军训自我鉴定怎么写
2014/02/13 职场文书
党员政治学习材料
2014/05/14 职场文书
2014年库房工作总结
2014/11/26 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书