单例模式(Singleton):用于为一个类生成一个唯一的对象。

    特点:

    1. 1、一个类只能有一个实例
    2. 2、它必须自行创建这个实例
    3. 3、它必须自行向整个系统提供这个实例

    使用场景:

    单例模式一般使用在资源共享和需要控制资源的情况下:
    
    例如:购物车,回收站,数据库连接,计数器,配置文件共享等所有项目中只需要存在一个的模块,你都可以采用单例模式。
    

    实现 :

    三私一公
    ①私有化构造方法:防止实例化
    ②私有化克隆方法:防止克隆
    ③私有化静态属性:保存对象
    ④公有化静态方法:获取对象
    

    代码实例:

     <?php
    
        class Database {
    
            //数据库连接资源
    
            protected static $_db;
    
            //单例标识符
    
            private static $_instance = NULL;
    
            //定义一个私有的构造函数,确保单例类不能通过new关键字实例化,只能被其自身实例化
    
            private function __construct(){
    
            }
    
            //外部调用的是 getInstance
    
            public static function getInstance(){
                //检测类是否被实例化
                if (self :: $_instance === null) {
    
                    self::$_instance = new self();
    
                    self::$_db = mysql_connect('localhost','root','root');
    
                    echo '只有一次实例化';
    
                }
    
                return self::$_instance;
    
            }
    
            public function select_db($db){
    
                return mysql_select_db($db,self::$_db);
    
            }
    
            //定义私有的__clone()方法,确保单例类不能被复制或克隆
    
            private function __clone(){
    
            }
    
        }
    
        $db = Database::getInstance();
    
        print_r($db->select_db('test'));
    
        print_r($db->select_db('test'));
    
        print_r($db->select_db('test'));
    
        //output:只有一次实例化111
    
        ?>
    
         通过输出(output)可以看出页面执行中,数据库类(class Database)只有第一次调用的时候是真实实例化的,剩下的调用都是直接从静态变量获取该实例的,这样的话就防止了在一次生命周期中多次连接数据库了,极大的节省了资源,这就是单例模式。
    

    pdo类单例模式实例:http://blog.csdn.net/u013372487/article/details/52700674

    注意:

    单例模式的好处就在于当前进程只产生一个对象(或者叫做模块),
    但有一点需要指出,如果单例模式的操作对象是一个资源类型,那么此时的单例模式并不是纯粹的单例模式,
    因为php的生命周期仅仅是页面级别的,所以他无法像Java语言那样在内存中将这个资源类型存起来,
    并且我们也无法借助类似redis的nosql缓存数据库,因为资源类型(类似mysql_connect的返回值)
    是无法被序列化(指的是资源无法转成字符串)。
    即,php的单例,仅指进程中单例,不似java,在整个内存中单例,所以在PHP语言下,单例模式是有瑕疵的。