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 和 MySQL 基础教程(四)
Oct 09 PHP
PHP如何得到当前页和上一页的地址?
Nov 27 PHP
PHP数组排序之sort、asort与ksort用法实例
Sep 08 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
php随机抽奖实例分析
Mar 04 PHP
PHP内核探索:哈希表碰撞攻击原理
Jul 31 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 PHP
PHP的PDO大对象(LOBs)
Jan 27 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读取MySQL数据代码
2008/06/05 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
详解Python的Django框架中的模版继承
2015/07/16 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
pycharm运行scrapy过程图解
2019/11/22 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
测控技术与仪器个人求职信范文
2013/12/30 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
食品安全检查制度
2014/02/03 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
酒会邀请函
2015/01/31 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle