<table cellspacing="0" cellpadding="0"><tr><td class="t_f" id="postmessage_52885"> 派生类数据库 单利模式 <div class="blockcode"> <div id="code_cZe"><ol> <li><?php<li>//要解决的问题 在一个方法中多次调用类 <li>//多次调用父类相同的类<li>class Pdoo {<li> public function __construct(){}<li> //这是个数据库的类<li> function select($name) {<li> echo "正宗" . $name;<li> }<li>}<li>class Conn {<li> static $db;<li> private function __construct() {<li> <li> }<li> <li> private function __clone() {<li> <li> }<li> //返回的的是数据库的连接 而非Base类<li> public static function getInstance() {<li> if (self::$db == null) {<li> self::$db = new Pdoo ();<li> }<li> return self::$db;<li> }<li> <li> //这个方法是无效的<li> function select($name) {<li> echo $name;<li> }<li><li>}<li>class Db {<li> static $db;<li> static $instanceInternalCache;<li> private function __construct() {<li> //初始话 跟连接数据库没有任何关系的<li> }<li> <li> private function __clone() {<li> }<li> //不能在这里实例化<li> public static function getDb() {<li> <li> }<li> //这里解决 在同一个方法中多次调用A不会被多次实例化<li> //解决不了多个派生类被实例化 也就是有多少派生类 数据库就要连接多少次<li> public static function getInstance($model) {<li> if (self::$instanceInternalCache [$model] == NULL) {<li> self::$instanceInternalCache [$model] = new $model ();<li> }<li> <li> return self::$instanceInternalCache [$model];<li> }<li> <li> function select($name) {<li> Conn::getInstance ()->select ( $name );</li> <li> }</li> <li>}</li> <li> <li>class A extends Db {</li> <li> </li> <li> function s($name) {</li> <li> $this->select($name);</li> <li> }</li> <li> </li> <li> public static function instance() {</li> <li> return parent::getInstance ( __CLASS__ );</li> <li> }</li> <li>}</li> <li> <li>class B extends Db {</li> <li> </li> <li> function s($name) {</li> <li> $this->select($name);</li> <li> }</li> <li> public static function instance() {</li> <li> return parent::getInstance ( __CLASS__ );</li> <li> }</li> <li>}</li> <li>class Main {</li> <li> </li> <li> public function t() {</li> <li> A::instance ()->select ( "1" );</li> <li> A::instance ()->select ( "11" );</li> <li> </li> <li> B::instance ()->select ( "2" );</li> <li> </li> <li> }</li> <li>}</li> <li>$t = new Main ();</li> <li>$t->t ();</li> </ol></div> <em onclick="copycode($('code_cZe'));">复制代码</em> </div> </td></tr></table> <div id="comment_52885" class="cm"> </div> <div id="post_rate_div_52885"></div> <br><br>