|
PHP 单例模式解析和实战 -it论坛
1、含义 <span]1、PHP缺点:
(1)、应用程序与数据库交互 (2)、控制配置信息
三、如何实现单例模式? 1、普通的数据库访问例子:- <?php
- ......
- //初始化一个数据库句柄
- $db = new DB(...);
-
- //添加用户信息
- $db->addUserInfo(...);
-
- ......
-
- //在函数中访问数据库,查找用户信息
- function getUserInfo()
- {
- $db = new DB(...);//再次new 数据库类,和数据库建立连接
- $db = query(....);//根据查询语句访问数据库
- }
-
- ?>
复制代码 2、应用单例模式对数据库进行操作:- <?php
-
- class DB
- {
- private $_db;
- private static $_instance;
-
- private function __construct(...)
- {
- $this->_db = pg_connect(...);//postgrsql
- }
-
- private function __clone() {}; //覆盖__clone()方法,禁止克隆
-
- public static function getInstance()
- {
- if(! (self::$_instance instanceof self) ) {
- self::$_instance = new self();
- }
- return self::$_instance;
- }
-
-
-
- public function addUserInfo(...)
- {
-
-
-
- }
-
- public function getUserInfo(...)
- {
-
- }
-
- }
-
- //test
-
- $db = DB::getInstance();
-
- $db->addUserInfo(...);
-
- $db->getUserInfo(...);
-
-
- ?>
复制代码 3、深入理解- <?php
- class db {
- public $conn;
- public static $sql;
- public static $instance=null;
- private function __construct(){
- require_once('db.config.php');
- $this->conn = mysql_connect($db['host'],$db['user'],$db['password']);
- if(!mysql_select_db($db['database'],$this->conn)){
- echo "失败";
- };
- mysql_query('set names utf8',$this->conn);
- }
- public static function getInstance(){
- if(is_null(self::$instance)){
- self::$instance = new db;
- }
- return self::$instance;
- }
- /**
- * 查询数据库
- */
- public function select($table,$condition=array(),$field = array()){
- $where='';
- if(!empty($condition)){
-
- foreach($condition as $k=>$v){
- $where.=$k."='".$v."' and ";
- }
- $where='where '.$where .'1=1';
- }
- $fieldstr = '';
- if(!empty($field)){
-
- foreach($field as $k=>$v){
- $fieldstr.= $v.',';
- }
- $fieldstr = rtrim($fieldstr,',');
- }else{
- $fieldstr = '*';
- }
- self::$sql = "select {$fieldstr} from {$table} {$where}";
- $result=mysql_query(self::$sql,$this->conn);
- $resuleRow = array();
- $i = 0;
- while($row=mysql_fetch_assoc($result)){
- foreach($row as $k=>$v){
- $resuleRow[$i][$k] = $v;
- }
- $i++;
- }
- return $resuleRow;
- }
- /**
- * 添加一条记录
- */
- public function insert($table,$data){
- $values = '';
- $datas = '';
- foreach($data as $k=>$v){
- $values.=$k.',';
- $datas.="'$v'".',';
- }
- $values = rtrim($values,',');
- $datas = rtrim($datas,',');
- self::$sql = "INSERT INTO {$table} ({$values}) VALUES ({$datas})";
- if(mysql_query(self::$sql)){
- return mysql_insert_id();
- }else{
- return false;
- };
- }
- /**
- * 修改一条记录
- */
- public function update($table,$data,$condition=array()){
- $where='';
- if(!empty($condition)){
-
- foreach($condition as $k=>$v){
- $where.=$k."='".$v."' and ";
- }
- $where='where '.$where .'1=1';
- }
- $updatastr = '';
- if(!empty($data)){
- foreach($data as $k=>$v){
- $updatastr.= $k."='".$v."',";
- }
- $updatastr = 'set '.rtrim($updatastr,',');
- }
- self::$sql = "update {$table} {$updatastr} {$where}";
- return mysql_query(self::$sql);
- }
- /**
- * 删除记录
- */
- public function delete($table,$condition){
- $where='';
- if(!empty($condition)){
-
- foreach($condition as $k=>$v){
- $where.=$k."='".$v."' and ";
- }
- $where='where '.$where .'1=1';
- }
- self::$sql = "delete from {$table} {$where}";
- return mysql_query(self::$sql);
-
- }
-
- public static function getLastSql(){
- echo self::$sql;
- }
-
-
-
- }
-
- $db = db::getInstance();
- //$list = $db->select('demo',array('name'=>'tom','password'=>'ds'),array('name','password'));
- //echo $db->insert('demo',array('name'=>'最近你啦','password'=>'123'));
- //echo $db->update('demo',array("name"=>'xxx',"password"=>'123'),array('id'=>1));
- echo $db->delete('demo',array('id'=>'2'));
- db::getLastSql();
- echo "<pre>";
- ?>
复制代码 本文摘自it论坛: http://blog.csdn.net/jungsagacity/article/details/7618587
|
|