php 派生類 數據庫鏈接 單例模式 xhprof實測 高效鏈接

php

<?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 ();
相關文章
相關標籤/搜索