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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。