PHP 实现单例模式的两种方式

第一种方式是由类维护一个静态属性,该属性是对象实例的引用,示例代码如下:

class Singleton {
        private static $_instance = null;
        public static function getInstance() {
                is_null(self::$_instance) && self::$_instance = new self();
                return self::$_instance;
        }
        private function __construct() { // 构造函数 private,防止类在外部被 new 出来
                ;
        }
}

 

第二种方式是由静态方法里面的一个静态变量返回对象实例的引用,示例代码如下:

class Singleton {
        public static function getInstance() {
                static $_instance = null;
                is_null($_instance) && $_instance = new self();
                return $_instance;
        }
        private function __construct() { // 构造函数 private,防止类在外部被 new 出来
                ;
        }
}

 

这两种实现有什么区别呢?效果是一样的吧~

今天才知道原来 PHP 5.3.0 之前版本是不支持延迟绑定的,赶紧把前两天写的类改过来,因为公司线上环境还是用的 5.2 系列版本。关于 PHP 延迟绑定(官网称呼其为:后期静态绑定)请看官网说明:http://www.php.net/manual/zh/language.oop5.late-static-bindings.php

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注