螃蟹学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); ?>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。