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数据库连接时容易出错的特殊符号问题
Sep 01 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
php简单实现sql防注入的方法
Apr 22 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
yii使用bootstrap分页样式的实例
Jan 17 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 PHP
PHP设计模式概论【概念、分类、原则等】
May 01 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部分常见问题总结
2006/10/09 PHP
php实现网站插件机制的方法
2009/11/10 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
python二维图制作的实例代码
2020/12/03 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
公证委托书格式
2014/09/13 职场文书
财务工作检讨书
2014/10/29 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
全陪导游词开场白
2015/05/29 职场文书
清明节随笔
2015/08/15 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
python使用torch随机初始化参数
2022/03/22 Python