返回单实例模式练习...登陆

单实例模式练习

为梦兼程2019-03-22 16:02:37262
<?php
//单例模式:一个类仅允许被实例化一次
class Wife
{

}

$wife1 = new Wife;
$wife2 = new Wife;

//查看$wife1和$wife2是否和Wife相等
echo ($wife1 instanceof Wife)?'是':'不是';
echo '<br>';
echo ($wife2 instanceof Wife)?'是':'不是';
echo '<br>';
//查看$wife1和$wife2是否相等
echo ($wife1 === $wife2)?'相等':'不相等';
echo '<br>';
//打印输出
var_dump($wife1);
echo '<br>';
var_dump($wife2);
// object(Wife)#1 (0) { } 
// object(Wife)#2 (0) { }
//他们不是同一个,id不一样
echo '<hr>';

//实例化通过两种方式:1.new来创建类实例;2.clone来实例
//数据库连接对象pdo等只能被实例化一次
//Hubby仅被实例化一次,在类中先私有化,再进行实例化
class Hubby
{
	private function __construct(){}//构造器私有化
	private function __clone(){}   //克隆私有化

	//创建类的内部静态属性,保存类的唯一实例
	protected static $instance =null;

	//创建一个外部接口  创建并返回当前类的唯一实例
	public static function getInstance()
	{
		if(is_null(static::$instance)){
			//进行实例化,静态延迟绑定
			static::$instance = new static();
		}
		//动态调用返回值
		return static::$instance;
	}

}

//外部实例化Hubby类
$hubby1 = Hubby::getInstance();
$hubby2 = Hubby::getInstance();
echo ($hubby1 instanceof Hubby)?'是':'不是';
echo '<br>';
echo ($hubby2 instanceof Hubby)?'是':'不是';
echo '<br>';
//查看他们是同一个实例对象,结果id也是一样的
echo ($hubby1 === $hubby2)?'完全相等':'不相等';
echo '<br>';
var_dump($hubby1);
echo '<br>';
var_dump($hubby2);
echo '<hr>';


最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送