PHP的单例模式

php的单例模式和java单例模式的比较

PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.net、Java等编译型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。

代码实现

class DB  
{  
    private $_db;  
    private static $_instance;  // 需要一个保存类的唯一实例的静态成员变量
  
    private function __construct(...)  
    {  
        $this->_db = pg_connect(...); // 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义
    }  
  
    private function __clone() {};  // 覆盖__clone()方法,禁止克隆  
  
    public static function getInstance()  
    {  
        if(! (self::$_instance instanceof self) ) {  
            self::$_instance = new self();  
        }  
        return self::$_instance;  
    }  
  
    public function addUserInfo(...)
    {
    }
     public function getUserInfo(...)
    { 
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,447评论 1 14
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,772评论 1 45
  • 公司的前端要给项目的webview加一个区分,用来区别是iOS端访问、android访问还是在浏览器访问的,说是要...
    xiao小马哥阅读 5,651评论 0 3
  • 1、不要贪恋没意义的人或事,拎着垃圾的手怎么腾得出来接礼物。新的征途上,往事归零,爱恨随意,往事不回头,未来不将就...
    然若一阅读 1,393评论 0 9