PHP设计模式(一):单例模式

class A{
	private function __construct(){}
}
通过将构造函数标记为私有化,该类已经不能通过new实例化了,那么我们如何访问类中的方法呢? 只需将类中的方法修饰为静态方法,那么我们就可以在外部调用了。
class A{
	private function __construct(){}
	public static function getInstance(){
                echo '调用静态方法,类不需经过实例化。';
	}
}
A::getInstance(); //调用静态方法,类不需经过实例化。
现在我们已经可以访问到该类中的方法了,那么我们只需在类中实例化本身,并把实例的对象标识为静态变量,这样就可以保持该类实例的唯一性了。
class A{
	private static $_instance; //类的实例
	private function __construct(){}
	public static function getInstance(){
		if (!(self::$_instance instanceof self)){ //判断类是否已经实例化
			self::$_instance = new self();
		}
                return self::$_instance; //返回唯一实例
	}
	public function F(){
		return 'A';
	}
}
$A = A::getInstance();
echo $A->F(); //A
以上代码基本可以达到我们的需求了,但还有个问题PHP语言是可以克隆对象的,为了防止对象被克隆从而破坏单一职责还需用将魔术方法__clone()标识为private,防止被clone。
class A{
	private static $_instance; //类的实例
	private function __construct(){}
	public static function getInstance(){
		if (!(self::$_instance instanceof self)){ //判断类是否已经实例化
			self::$_instance = new self();
		}
                return self::$_instance; //返回唯一实例
	}
    private function __clone(){}
	public function F(){
		return 'A';
	}
}

转载于:https://my.oschina.net/sakmon/blog/393923

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值