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