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产生动态的影像图
Oct 09 PHP
Windows下的PHP5.0详解
Nov 18 PHP
解析php做推送服务端实现ios消息推送
Jul 01 PHP
php生成静态页面的简单示例
Apr 17 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
PHP导入导出Excel代码
Jul 07 PHP
php基础教程
Aug 26 PHP
PHP微信开发之查询城市天气
Jun 23 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
php实现头像上传预览功能
Apr 27 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 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
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
php中__toString()方法用法示例
2016/12/07 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
js 单引号 传递方法
2009/06/22 Javascript
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
文明风采获奖感言
2014/02/18 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
安全演讲稿大全
2014/05/09 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL