php 派生类 数据库连接 单例模式 xhprof实测 高效连接

本文通过PHP实现了一个简单的单例模式,并演示了如何利用该模式进行数据库操作。介绍了如何避免在同一个方法中多次实例化同一类,同时解决了多个派生类实例化导致的多次数据库连接问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

171335_TLbh_554046.jpg

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


转载于:https://my.oschina.net/u/554046/blog/302413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值