2019独角兽企业重金招聘Python工程师标准>>>
、
<?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 ();