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 相关文章推荐
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
PHP Socket 编程
Apr 09 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
php实现文本数据导入SQL SERVER
May 17 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
Aug 23 PHP
php轻松实现文件上传功能
Mar 03 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
PHP实现统计代码行数小工具
Sep 19 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
Oct 16 PHP
php模拟实现斗地主发牌
Apr 22 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替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
PHP微信支付实例解析
2016/07/22 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
webpack external模块的具体使用
2018/03/10 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
Python 正则表达式操作指南
2009/05/04 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
python 实现客户端与服务端的通信
2020/12/23 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
程序运行正确, 但退出时却"core dump"了,怎么回事
2014/02/19 面试题
警示教育活动总结
2014/05/05 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
公司欠款证明
2015/06/24 职场文书
家访教师心得体会
2016/01/23 职场文书