首页 > 代码库 > php 派生类 数据库连接 单例模式 xhprof实测 高效连接

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

<?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 ();