<?php
//单例模式:在应用中最多只能拥有一个该类的实例存在,一旦创建就会一直在内存中。
//用法:把一个对象实例化后放在静态属性上
//场景:数据库类设计,可以保证只连接一次数据库
//特点1:单例类不能直接实例化创建,只能由类本身实例化,因此构造函数必须标记为private,从而防止类被实例化
//特点2:需要有一个能访问到的实例公开的静态方法和一个私有静态成员变量来保存类的实例
//特点3:类中通常需要一个空的私有__clone()方法防止别人对单例类进行实例克隆

class single {

    protected static $ins = null;
    //方法前加final,在继承后该方法将不能被子类覆盖
    final protected function __construct(){

    }

    final protected function __clone(){

    }

    public static function getIns(){
        if(self::$ins === null){
            self::$ins = new self();
        }
        return self::$ins;
    }

}

$s1 = single::getIns();
$s2 = single::getIns();
if($s1 === $s2){
    echo '单例模式';
}