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 相关文章推荐
PHP中的integer类型使用分析
Jul 27 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
Thinkphp无限级分类代码
Nov 11 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
php intval函数用法总结
Apr 14 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 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 高手之路(一)
2006/10/09 PHP
PHP面向对象法则
2012/02/23 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
对联广告js flash激活
2006/10/19 Javascript
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
vue学习笔记之指令v-text &amp;&amp; v-html &amp;&amp; v-bind详解
2017/05/12 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
在Python的Django框架中编写编译函数
2015/07/20 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
软件工程师面试题
2012/06/25 面试题
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书