最新消息:欢迎加入小松的QQ群一起讨论一起学习,本站启用elasticsearch全文检索系统,提供搜索的精确度

php单例模式

PHP 31浏览 0评论

单例模式的特点

构造函数和克隆函数必须声明为私有(private)的,防止外部程序new类从而失去单例模式的意义
必须提供一个访问这个实例的公共(public)的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用
它必须自己创建这个实例
拥有一个保存类的实例的静态成员变量

应用场景

数据库连接、缓存操作、分布式存储

php单例模式的应用主要在于数据库应用, 一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源

单例模式实例

<?php
class Song
{

//保存类实例的静态成员变量
    private static $_instance;

//private标记的构造方法
    private function __construct()
    {
        echo 'This is a Constructed method;';
    }

//创建__clone方法防止对象被复制克隆
    public function __clone()
    {
        trigger_error('Clone is not allow!', E_USER_ERROR);
    }

//单例方法,用于访问实例的公共的静态方法
    public static function getInstance()
    {
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self;
        }
        return self::$_instance;
    }

    public function test()
    {
        echo '调用方法成功';
    }

}

/*用new实例化private标记构造函数的类会报错
$song = new Song();

复制(克隆)对象将导致一个E_USER_ERROR
$danli_clone = clone $song;
*/


//正确方法,用双冒号::操作符访问静态方法获取实例
$song = Song::getInstance();
$song->test();
?>

mysql类的单例模式使用

class DB    
{    
    private $_db;    
    private static $_instance;    
    
    private function __construct(...)    
    {    
        $this->_db = mysql_connect(...);//mysql连接    
    }    
    
    private function __clone() {};  //覆盖__clone()方法,禁止克隆    
    
    public static function getInstance()    
    {    
        if(! (self::$_instance instanceof self) ) {    
            self::$_instance = new self();    
        }    
        return self::$_instance;    
    }  

    /*查数据*/
    public function select(){

    } 
    /*更新数据*/
    public function update(){

    }
    /*插入数据*/
    public function insert(){

    }
}
QQ交流群:136351212

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» php单例模式
本文链接地址:https://www.phpsong.com/2991.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!