>  기사  >  백엔드 개발  >  PHP의 싱글톤 패턴

PHP의 싱글톤 패턴

autoload
autoload원래의
2021-03-02 17:17:586102검색

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. 싱글턴 패턴의 정의 정의: 싱글턴 패턴은 클래스 디자인이 최대 하나의 객체만 생성한다는 디자인 아이디어입니다.

3. 싱글톤 패턴의 인스턴스 🎜🎜🎜🎜 🎜a.                                                   reee🎜 b. 클래스를 여러 번 인스턴스화할 수 있기 때문에 여러 객체를 생성하므로 생성자를 사유화할 수 있습니다. 🎜
<?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();
?>
🎜 c. 인스턴스화된 객체의 수가 0이 되도록 생성자를 사유화하여 클래스 내부의 정적 메서드를 통해 생성자를 호출한 다음 반환할 수 있습니다. 외부에 생성자. 🎜rrreee🎜 d. 위의 방법을 통해 객체를 인스턴스화할 수 있지만 생성자 메서드의 사용 권한도 해제됩니다. 이 메서드가 하나의 개체만 반환하도록 하려면 생성된 개체를 클래스 내에 저장할 수 있는 방법이 있는지 확인해야 합니다. 처음으로 새 개체가 생성되고 이전 개체가 나중에 반환됩니다. 이 경우 정적 속성을 사용해야 합니다. 🎜rrreee🎜 e. 이 시점에서는 정적 메서드를 호출하여 단 하나의 객체를 얻을 수 있음을 보장할 수 있습니다. 그러나 clone을 통해 새 객체를 인스턴스화할 수 있으므로 clone을 사유화할 수 있습니다. 🎜rrreee🎜🎜추천: 🎜php 튜토리얼🎜🎜🎜🎜

위 내용은 PHP의 싱글톤 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.