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下通过POST还是GET来传值
Jun 05 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
PHP简洁函数小结
Aug 12 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
PHP中的流(streams)浅析
Jul 02 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
YII框架行为behaviors用法示例
Apr 26 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
由php的call_user_func传reference引发的思考
2010/07/23 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
Yii使用技巧大汇总
2015/12/29 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
Django中使用group_by的方法
2015/05/26 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
劳资人员岗位职责
2013/12/19 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
幼师小班个人总结
2015/02/12 职场文书
消费者理赔投诉书
2015/07/02 职场文书
关于教师节的广播稿
2015/08/19 职场文书
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python
python区块链实现简版工作量证明
2022/05/25 Python