单实例模式练习

Original 2019-03-22 16:02:37 262
abstract:<?php //单例模式:一个类仅允许被实例化一次 class Wife { } $wife1 = new Wife; $wife2 = new Wife; //查看$wife1和$wife2是否和Wife相等 echo ($wife1 instanceof Wife)?'是&#
<?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>';


Correcting teacher:查无此人Correction time:2019-03-22 17:28:40
Teacher's summary:完成的不错。编程有很多种功能,写法。这种设计模式,可以快速解决问题。继续加油

Release Notes

Popular Entries