PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [1] 单例模式连接数据库

单例模式

单例模式三大原则:

① 构造函数需要标记为非 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

 

你可能感兴趣的:(单例模式)