码迷,mamicode.com
首页 > 数据库 > 详细

php 派生类 数据库连接 单例模式 xhprof实测 高效连接

时间:2014-08-16 18:37:01      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:http   os   io   数据   ar   2014   问题   cti   

bubuko.com,布布扣

<?php
//要解决的问题 在一个方法中多次调用类 
//多次调用父类相同的类
class Pdoo {
	public function __construct(){}
	//这是个数据库的类
	function select($name) {
		echo "正宗" . $name;
	}
}
class Conn {
	static $db;
	private function __construct() {
	
	}
	
	private function __clone() {
	
	}
	//返回的的是数据库的连接 而非Base类
	public static function getInstance() {
		if (self::$db == null) {
			self::$db = new Pdoo ();
		}
		return self::$db;
	}
	
	//这个方法是无效的
	function select($name) {
		echo $name;
	}

}
class Db {
	static $db;
	static $instanceInternalCache;
	private function __construct() {
		//初始话 跟连接数据库没有任何关系的
	}
	
	private function __clone() {
	}
	//不能在这里实例化 否则数据库连接就无效了
	public static function getDb() {
	
	}
	//这里解决 在同一个方法中多次调用A不会被多次实例化
	//解决不了多个派生类被实例化 也就是有多少派生类 数据库就要连接多少次
	public static function getInstance($model) {
		if (self::$instanceInternalCache [$model] == NULL) {
			self::$instanceInternalCache [$model] = new $model ();
		}
		
		return self::$instanceInternalCache [$model];
	}
	
	function select($name) {
		Conn::getInstance ()->select ( $name );
	}
}

class A extends Db {
	
	function s($name) {
		$this->select($name);
	}
	
	public static function instance() {
		return parent::getInstance ( __CLASS__ );
	}
}

class B extends Db {
	
	function s($name) {
		$this->select($name);
	}
	public static function instance() {
		return parent::getInstance ( __CLASS__ );
	}
}
class Main {
	
	public function t() {
		A::instance ()->select ( "1" );
		A::instance ()->select ( "11" );
		
		B::instance ()->select ( "2" );
	
	}
}
$t = new Main ();
$t->t ();


php 派生类 数据库连接 单例模式 xhprof实测 高效连接,布布扣,bubuko.com

php 派生类 数据库连接 单例模式 xhprof实测 高效连接

标签:http   os   io   数据   ar   2014   问题   cti   

原文地址:http://my.oschina.net/u/554046/blog/302413

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!