单例模式
单例模式三大原则:
① 构造函数需要标记为非 public (防止外部使用 new 操作符创建对象),单例类不能在其他类中实例化,只能被自身实例化;
② 拥有一个保存类的实例的静态成员变量 $_instance
③ 拥有一个访问这个实例的公共的静态方法
单例模式(参见 PHP 单例模式代码片段):
<?php /* * 单例模式 */ class DB{ static private $_instance; private function __construct(){ } static public function getInstance(){ if(!self::$_instance instanceof self){ self::$_instance = new self(); } return self::$_instance; } }
单例模式连接数据库:
1 <?php 2 /* 3 * 单例模式连接数据库 4 */ 5 class DB{ 6 static private $_instance; //非public的类的实例的静态成员变量 7 static private $_connectSource; //连接数据库返回的资源句柄 8 private $_dbConfig = array( 9 ‘host‘=>‘127.0.0.1‘, 10 ‘username‘=>‘root‘, 11 ‘pwd‘=>‘‘, 12 ‘database‘=>‘chat‘ 13 ); 14 15 private function __construct(){ //非public 的构造函数 16 } 17 18 static public function getInstance(){ //访问实例的公共静态方法 19 if(!self::$_instance instanceof self){ 20 self::$_instance = new self(); 21 } 22 return self::$_instance; 23 } 24 25 public function connect(){ 26 if(!self::$_connectSource){ 27 //连接mysql服务 28 self::$_connectSource = mysql_connect($this->_dbConfig[‘host‘],$this->_dbConfig[‘username‘],$this->_dbConfig[‘pwd‘]); 29 if(!self::$_connectSource){ 30 die(‘mysql connect error‘.mysql_error()); 31 } 32 //选择数据库 33 mysql_select_db($this->_dbConfig[‘database‘],self::$_connectSource); 34 //设置字符集 35 mysql_query(‘set names "UTF8"‘,self::$_connectSource); 36 } 37 return self::$_connectSource; //返回资源 38 } 39 } 40 41 $connect = DB::getInstance()->connect(); 42 var_dump($connect); 43 44 $sql = ‘select * from messages‘; 45 $res = mysql_query($sql,$connect); 46 $num = mysql_num_rows($res); 47 var_dump($num);
页面输出:
resource(3, mysql link)
int 2
时间: 2024-11-01 17:24:32