首页 > 代码库 > 螃蟹学PHP设计模式之数据访问对象模式

螃蟹学PHP设计模式之数据访问对象模式

3.数据访问对象模式

今天又要上班了,不过公司的事情倒不多,先花点时间回忆之前学的两个设计模式吧......好,复习完了,开始学习新的数据访问对象模式。螃蟹发现其实之前的项目基本都用上了数据访问对象模式,因为在程序中手写sql实在是效率不高且不易于维护。这就好比你有个亲戚在美国,你每个月都想送点东西给他,然后你每次都要做飞机汽车跑到他哪儿去,东西给他再风尘仆仆地回来,结果有一天你突然发现有快递这服务,你每次把东西交给快递就啥事不管了,由此感叹真方便啊。其实螃蟹也觉得数据访问对象模式真的如同快递员一样方便,之前用过的各种PHP MVC框架和JAVA WEB框架以及Python ORM框架等,无不采用了这种设计模式。在操作数据库时,可以先建一个Base抽象类来创建连接,再每个表对象继承抽象类,实现对表的操作。

参考项目模块:数据库访问层

这个数据库访问层螃蟹觉得还是很重要的,最开始做项目的时候基本都是自己写的,现在用了框架之后确实没怎么在意了,以后还是要多研究一下框架技术,不能依赖框架,这样螃蟹怎么能拿到好的offer.

数据库连接基类:BaseConnect.class.php

<?php 
class BaseDAO{
	protected $_connection = null;
	protected $_username = ‘root‘;
	protected $_password = ‘‘;
	protected $_host = ‘127.0.0.1‘; 
	protected $_db = ‘test‘;
	protected $_charset = ‘UTF8‘;
	
	function __construct(){
		$this->__connect();
	}
	
	private function __connect(){
		$this->_connection = mysql_connect($this->_host,$this->_password,$this->_password);
		mysql_select_db($this->_db,$this->_connection);
		mysql_query(‘set names ‘.$this->_charset,$this->_connection);
	}
	
	//添加数据
	public function add($datas){
		$keys = array();
		$values = array();
		foreach($datas as $k => $v){
			array_push($keys, $k);
			array_push($values,‘"‘.$v.‘"‘); 
		}
		$sql = ‘insert into ‘.$this->_table.‘(‘.implode(‘,‘, $keys).‘) values(‘.implode(‘,‘, $values).‘)‘;
		$res = mysql_query($sql,$this->_connection);
		return $res;
	}
}
?>

用户表数据结构:

CREATE TABLE `user` (
`id` int(11) NOT NULL,
`username` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) 
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
;


用户数据库访问对象:UserDAO.class.php

<?php 
require(‘BaseDAO.class.php‘);

class UserDAO extends BaseDAO{
	protected $_table = ‘user‘;
	
	public function add($datas){
		parent::add($datas);
	} 
}
?>

最后螃蟹测试看看: TestDAO.php

<?php
require(‘UserDAO.class.php‘);
 
//模拟用户数据
$user = array(‘username‘=>‘螃蟹‘,‘password‘=>‘ok123456‘);
//实例化数据库连接层
$userobj = new UserDAO();
//添加数据
$userobj->add($user);

?>


运行看看,数据添加上了就完成了。这个DAO模式还是挺不错的,这次学习也是对之前写的东西进行回顾,可能很多东西自己能写出了,但是不知道这到底叫什么,这就做不到有理可依了。在公司盖着被子吹空调,真忒么冷......