php 单例模式

单例模式特点:在程序执行过程里,只有一个类对象存在

单例模式的三要素:

1.构造方法私有化(禁止类外部用new的方式实例化类)

2.禁止克隆(允许克隆的话,将可以克隆出多个对象)

3.拥有一个静态方法,方法中进行仅一次对象实例化,允许类外部调用

例子如下:

class Single {

        private static  $singleOb;

        private function __construct() {
                
        }

        static function single() {
                if (!self::$singleOb instanceof Single) {//判断self::$singleOb中有没有Single类的实例化对象
                        self::$singleOb = new Single();
                        return self::$singleOb;
                } else {
                        return self::$singleOb;
                }
        }

        public function __clone() {
                
                trigger_error('Clone is not allow' ,E_USER_ERROR);//报错
        }

        public function test() {
                echo "single test";
        }

}

测试:

1.正确方式
$singleOb = Single::single(); var_dump($singleOb); $singleOb -> test();

2.禁止克隆 $oc=clone($singleOb); var_dump($oc);

3.禁止外部调用构造函数 $ob = new Single(); $ob -> test();