zoukankan      html  css  js  c++  java
  • PHP单例模式简记

    单例模式只能实例化一次即为单例模式

    如何实现只能实例化一次:突破口在于类的构造函数,我们把构造方法变为隐私或者受保护的方法,然后执行代码

    <?php 
    
     Class Temp {
         protected function __construct () {
    
         }
     }
    
     $test = new Temp();

    上面的代码执行会有如下报错

    这样的话就不能实例化了,别人也不能随便的实例化它,但是我们自己应该如何实例化它呢?进一步修改代码

    <?php 
    
     Class Temp {
         protected function __construct () {
    
         }
    
         public static function getInstance () {
             $test = new Temp();
             return $test;
         }
     }
    
     // $test = new Temp();
     $test = Temp::getInstance();
    
     var_dump($test);

    运行代码,便可以得到一个对象

    这说明我们已经成功的实例化了这个类,这说明我们成功的实例化了这个类。

    但是这并没有达到我们要的目的,修改代码如下

    <?php 
    
     Class Temp {
         protected function __construct () {
    
         }
    
         public static function getInstance () {
             $test = new Temp();
             return $test;
         }
     }
    
     // $test = new Temp();
     $test1 = Temp::getInstance();
     $test2 = Temp::getInstance();
     $test3 = Temp::getInstance();
    
     if ($test1 === $test2) {
         echo '同一个';
     } else {
         echo '不是同一个';
     }

    执行代码

    等到else的结果,这证明这是两个不一样的实例,也就是说我们并没有实现单例,继续修改代码如下

    <?php 
    
     Class Temp {
         protected function __construct () {
    
         }
    
         public static function getInstance () {
             static $test;
             if (empty($test)) {
                 $test = new Temp();
             }
             return $test;
         }
     }
    
     // $test = new Temp();
     $test1 = Temp::getInstance();
     $test2 = Temp::getInstance();
     $test3 = Temp::getInstance();
    
     if ($test1 === $test2) {
         echo '同一个';
     } else {
         echo '不是同一个';
     }

    运行代码

    这次获得的结果为条件成立的结果,证明这两个实例其实是同一个实例,到此我们便实现了我们的目的,这个类只会被实例化一次,此即为单例模式。

  • 相关阅读:
    【内存泄漏】方法三:利用linux的valgrind命令定位内存泄露(Memory Leak)
    【内存泄漏】方法二:利用linux的mtrace命令定位内存泄露(Memory Leak)
    Windows下sqlmap的使用_01
    关于安装和使用BurpSuite及Java环境的配置问题
    Windows下修改环境变量的几种方法
    OPPO VOOC快充原理
    在线代码运行
    Linux在线学习模拟器
    socket设置为非阻塞模式
    pthread_mutexattr_t设置的相关函数及其说明
  • 原文地址:https://www.cnblogs.com/cyclzdblog/p/PHP.html
Copyright © 2011-2022 走看看