单实例模式练习
为梦兼程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>';