zoukankan      html  css  js  c++  java
  • PHP_单例模式、实例代码

    在PHP中实例化一个对象,就会新开辟一个新内存空间,当一些业务要实例化多个对象时,会占用大量内存。这个问题可以用单例模式解决。

    我们实例化对象可以直接new出来,也可以通过类中的构造函数  __construct 、析构函数 __destruct、克隆__clone来实现,我们可以将这3个函数私有化,不让外部这样实例化对象;然后设置一个公共静态方法,通过类名调用。这是“三私一公”。

    具体代码如下:

     1 <?php
     2 
     3 //先创建一个类,后面调用
     4 class A {
     5 
     6 }
     7 
     8 //创建单例类
     9 class One{
    10     //设置一个私有静态的属性,用于保存对象
    11     private static $obj;
    12 
    13     //将构造方法私有化
    14     private function __construct(){
    15     }
    16 
    17     //创建一个公共的静态方法,静态方法是为了直接通过类名调用
    18     static function getObj($className){
    19         /**
    20          * instanceof   看一个对象是否属于这个类
    21          *如果实例化的对象属于这个类
    22          */
    23         if(self::$obj instanceof $className){
    24             //就把这个对象返回
    25             return self::$obj;
    26         }else{
    27             //如果否,就实例化这个对象再返回
    28             self::$obj = new $className;
    29             return self::$obj;
    30         } 
    31     }
    32 
    33     //将克隆私有化
    34     private function __clone(){
    35     }
    36 }
    37 
    38     //测试
    39     //无论实例化多少次类A,都只会得到一个对象
    40     $one1 = One::getObj('A');
    41     $one2 = One::getObj('A');
    42     $one3 = One::getObj('A');
    43     var_dump($one1);
    44     var_dump($one2);
    45     var_dump($one3);
  • 相关阅读:
    [爬虫] js
    [爬虫] appium-移动端
    如何进行代码的重构
    重写与覆盖的区别
    解决C#中FileSystemWatcher类的Changed事件触发多次的问题
    关于sqlserver 2008 远程导入表数据
    css 选择器
    前端三剑客
    前端的概述
    元类作业
  • 原文地址:https://www.cnblogs.com/bk233/p/7279674.html
Copyright © 2011-2022 走看看