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