<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>//多次调用父类相同的类</li> <li>class Pdoo {</li> <li> public function __construct(){}</li> <li> //这是个数据库的类</li> <li> function select($name) {</li> <li> echo "正宗" . $name;</li> <li> }</li> <li>}</li> <li>class Conn {</li> <li> static $db;</li> <li> private function __construct() {</li> <li> </li> <li> }</li> <li> </li> <li> private function __clone() {</li> <li> </li> <li> }</li> <li> //返回的的是数据库的连接 而非Base类</li> <li> public static function getInstance() {</li> <li> if (self::$db == null) {</li> <li> self::$db = new Pdoo ();</li> <li> }</li> <li> return self::$db;</li> <li> }</li> <li> </li> <li> //这个方法是无效的</li> <li> function select($name) {</li> <li> echo $name;</li> <li> }</li> <li> <li>}</li> <li>class Db {</li> <li> static $db;</li> <li> static $instanceInternalCache;</li> <li> private function __construct() {</li> <li> //初始话 跟连接数据库没有任何关系的</li> <li> }</li> <li> </li> <li> private function __clone() {</li> <li> }</li> <li> //不能在这里实例化</li> <li> public static function getDb() {</li> <li> </li> <li> }</li> <li> //这里解决 在同一个方法中多次调用A不会被多次实例化</li> <li> //解决不了多个派生类被实例化 也就是有多少派生类 数据库就要连接多少次</li> <li> public static function getInstance($model) {</li> <li> if (self::$instanceInternalCache [$model] == NULL) {</li> <li> self::$instanceInternalCache [$model] = new $model ();</li> <li> }</li> <li> </li> <li> return self::$instanceInternalCache [$model];</li> <li> }</li> <li> </li> <li> function select($name) {</li> <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>