<?php
//单例模式
//第一步,普通类
class single
{
}
$s1 = new single();
$s2 = new single();
//两个对象是一个的时候才全等
if($s1 === $s2)
{
echo '是一个对象';
}else{
echo '不是一个对象';
}
//第二步 封锁new操作
class single
{
protected function __construct()
{
}
}
$s = new single();
第三步 留个接口来new对象
class single
{
public static function getIns()
{
return new self;
}
protected function __construct()
{
}
}
$s1 = single::getIns();
$s2 = single::getIns();
//两个对象是一个的时候才全等
if($s1 === $s2)
{
echo '是一个对象';
}else{
echo '不是一个对象';
}
//第四步, getIns先判断实例
class single
{
protected static $ins = null;
public static function getIns()
{
if(self::$ins === null)
{
self::$ins = new self();
}
return self::$ins;
}
protected function __construct()
{
}
}
$s1 = single::getIns();
$s2 = single::getIns();
//两个对象是一个的时候才全等
if($s1 === $s2)
{
echo '是一个对象';
}else{
echo '不是一个对象';
}
class multi extends single
{
public function __construct()
{
}
}
$s1 = new multi();
$s2 = new multi();
if($s1 === $s2)
{
echo '是一个对象';
}
else
{
echo '不是一个对象';
}
//第五步 用final防止继承时候被修改权限
class single
{
protected static $ins = null;
public static function getIns()
{
if(self::$ins === null)
{
self::$ins = new self();
}
return self::$ins;
}
final protected function __construct()
{
}
}
class multi extends single
{
public function __construct()
{
}
}
$s1 = new multi();
$s2 = new multi();
if($s1 === $s2)
{
echo '是一个对象';
}
else
{
echo '不是一个对象';
}
//第六步,禁止克隆
class single
{
protected static $ins = null;
public static function getIns()
{
if(self::$ins === null)
{
self::$ins = new self();
}
return self::$ins;
}
final protected function __construct()
{
}
//封锁克隆
final protected function __clone()
{
}
}
$s1 = single::getIns();
$s2 = clone $s1;
if($s1 === $s2)
{
echo '是一个对象';
}
else
{
echo '不是一个对象';
}
6、单例模式
最新推荐文章于 2024-09-25 23:08:45 发布