1. 싱글턴 패턴의 유래
클래스
는 실생활에서 공통적인 특성을 지닌 것들의 클래스를 추상화한 것이며, 클래스의 인스턴스화를 통해 많은 객체가 생성됩니다. 하지만 동시에 많은 리소스도 소비합니다(예: 데이터베이스
에 연결할 때 연결 수 제한, 예를 들어 리소스 관리자
열기) 컴퓨터에서는 고유함) 따라서 리소스의 고유성을 보호하기 위해 단일 케이스 모드
가 탄생했습니다. 类
是对现实生活中一类具有共同特征的事物的抽象,通过类的实例化,产生了许多的对象,但同时也产生了大量资源的消耗(例如在连接数据库
时连接数量的限制,又例如在计算机中打开资源管理器
却具有唯一性),由此也产生了对类的实例化进行了限定的需求,为了保护资源的唯一性,由此产生了单例模式
。
2.单例模式的定义
定义:单例模式singleton,是一种类的设计只会最多产生一个对象的设计思想。
3.单例模式的实例
a.创建一个空类 。
<?php class Use{ } $a=new Use();//实例化一个对象 ?>
b.能够多次实例化类,是产生多个对象的原因,所以可以通过私有化构造方法
。
<?php class Use{ private function __construct() { echo __FUNCTION__."<br>"; } } ?>
c.私有化构造方法
使得实例化对象产生的数目为0,由此可以通过在类的内部,通过静态方法
调用构造方法,然后将构造方法返回至外部。
<?php class Use{ private function __construct() { echo __FUNCTION__."<br>"; } public static function getInstance() { return new self(); } } $s1=Use::getSingleton(); ?>
d.通过上述的方法虽然能够实例化对象,但是同时也将构造方法的使用权限外放出去。如果想要该方法只返回一个对象,就得保证类内部有办法存着某个产生的对象,第一次产生新的,后面返回旧的。此时需要使用静态属性。
<?php class Use{ private static $object = NULL;//初始化为NULL,没有对象 private function __construct() { echo __FUNCTION__."<br>"; } public static function getInstance() { //判断类内部的静态属性是否存在对象 if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象 self::$object = new self(); } //返回对象给外部 return self::$object; } } $s1=Use::getSingleton(); ?>
e.此时可以保证,通过调用静态方法
只得到一个对象
。但是依旧可以通过克隆
,不停的实例化新的对象,所以可以将克隆
2. 싱글턴 패턴의 정의 정의: 싱글턴 패턴은 클래스 디자인이 최대 하나의 객체만 생성한다는 디자인 아이디어입니다.
생성자
를 사유화할 수 있습니다. 🎜<?php class Use{ private static $object = NULL;//初始化为NULL,没有对象 private function __construct() { echo __FUNCTION__."<br>"; } public static function getInstance() { //判断类内部的静态属性是否存在对象 if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象 self::$object = new self(); } //返回对象给外部 return self::$object; } private function __clone(){} } $s1=Use::getSingleton(); ?>
생성자
를 사유화하여 클래스 내부의 정적 메서드
를 통해 생성자를 호출한 다음 반환할 수 있습니다. 외부에 생성자. 🎜rrreee🎜 d. 위의 방법을 통해 객체를 인스턴스화할 수 있지만 생성자 메서드의 사용 권한도 해제됩니다. 이 메서드가 하나의 개체만 반환하도록 하려면 생성된 개체를 클래스 내에 저장할 수 있는 방법이 있는지 확인해야 합니다. 처음으로 새 개체가 생성되고 이전 개체가 나중에 반환됩니다. 이 경우 정적 속성을 사용해야 합니다. 🎜rrreee🎜 e. 이 시점에서는 정적 메서드
를 호출하여 단 하나의 객체
를 얻을 수 있음을 보장할 수 있습니다. 그러나 clone
을 통해 새 객체를 인스턴스화할 수 있으므로 clone
을 사유화할 수 있습니다. 🎜rrreee🎜🎜추천: 🎜php 튜토리얼🎜🎜🎜🎜위 내용은 PHP의 싱글톤 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!