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生成EXCEL的东东
Oct 09 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
php使用google地图应用实例
Dec 31 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
php-msf源码详解
Dec 25 PHP
PHP代码重构方法漫谈
Apr 17 PHP
Nginx+php配置文件及原理解析
Dec 09 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+Session防止表单重复提交的解决方法
2018/04/09 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
Python读写unicode文件的方法
2015/07/10 Python
python 系统调用的实例详解
2017/07/11 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python调用C语言程序方法解析
2020/07/07 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
蟋蟀的住宅教学反思
2014/04/26 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
2014司机年终工作总结
2014/12/05 职场文书
公司感谢信范文
2015/01/22 职场文书
个人总结与自我评价
2015/02/14 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL