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 xml实例 留言本
Mar 20 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
PHP的PDO错误与错误处理
Jan 27 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 PHP
PHP isset empty函数相关面试题及解析
Dec 11 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
77A一级收信机修理记
2021/03/02 无线电
Snoopy类使用小例子
2008/04/15 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
php addslashes和mysql_real_escape_string
2010/01/24 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
javascript基础知识讲解
2017/01/11 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
Koa 中的错误处理解析
2019/04/09 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
利用python代码写的12306订票代码
2015/12/20 Python
python 实时遍历日志文件
2016/04/12 Python
Numpy数组的保存与读取方法
2018/04/04 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
分布式数据库需要考虑哪些问题
2013/12/08 面试题
装潢设计实习自我鉴定
2013/09/19 职场文书
求职信写作要突出重点
2014/01/01 职场文书
投标邀请书范本
2015/02/02 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python