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中global和$GLOBALS[]的分析之一
Feb 02 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
请离开include_once和require_once
Jul 18 PHP
php二维数组转成字符串示例
Feb 17 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
详解WordPress开发中wp_title()函数的用法
Jan 07 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
删除PHP数组中的重复元素的实现代码
Apr 10 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 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类中Static方法效率测试代码
2010/10/17 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
python 公共方法汇总解析
2019/09/16 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
Linux文件系统类型
2012/02/15 面试题
举例说明类变量和实例变量的区别
2016/06/30 面试题
公司人力资源的自我评价
2014/01/02 职场文书
投标诚信承诺书
2014/05/26 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
高中生旷课检讨书
2014/10/08 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
二审答辩状范文
2015/05/22 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
Python 全局空间和局部空间
2022/04/06 Python