首页 > 代码库 > php 派生类 数据库连接 单例模式 xhprof实测 高效连接
php 派生类 数据库连接 单例模式 xhprof实测 高效连接
、
<?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 ();
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。