笔记4:单例模式

class Single
{
    protected static $ins = null;

    // 1. 封锁new操作 3.不允许覆盖
    final protected function __construct()
    {
    }

    // 4.防止克隆
    final protected function __clone()
    {
    }

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

// 会报错
//$oo = new Single();

$jj = Single::getIns();
$kk = Single::getIns();

if ($jj === $kk) {
    echo "是一个对象";
} else {
    echo "不是一个对象";
}

//
//class multi extends Single
//{
//    public function __construct()
//    {
//    }
//}
//
//$s1 = new multi();
//$s2 = new multi();
//if ($s1 === $s2) {
//    echo "是一个对象";
//} else {
//    echo "不是一个对象";
//}
//
//$jj0 = clone $jj;
//if ($jj === $jj0) {
//    echo "是一个对象";
//} else {
//    echo "不是一个对象";
//}
//