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

    PHP单例模式,就是一个对象只被生成一次,但该对象可以被其它众多对象使用。单例模式使用最多的场景,是数据库连接操作。我们知道,生成一个对象的操作是用new函数来实现,但是new对象都会消耗内存,而且有时候对同一个对象,在不同文件中可能会生成多次,这就造成了系统资源的浪费。然而使用单例模式,则可以很好的避免这种情况。

    以数据库为例,假设我们有一个数据库的类,要实现数据库连接。如果不使用单例模式,那么在很多PHP文件中,我们可能到要创建这样的一个连接,这其实是对资源的很大浪费。那么下面介绍单例模式实现方法:

    <?php
    
    class Database
    {
        protected static $db;
        private function __construct()
        {
    
        }
        static public function getInstace(){
            if(self::$db){
                return self::$db;
            }else{
                self::$db = new self();
                return self::$db;
            }
        }
    }
    //错误调用方法
    //用new实例化private标记构造函数的类会报错
    $db = new Database();
    
    //正确获取实例方法
    $db = Database::getInstace();

    使用单例模式的好处是,当你在其他地方也要使用到这个类,比如上面的数据库类。那么你可以在其它地方直接调用 Database::getInstace(),而且该实例只会被生成一次,不会被重复生成,所以不会浪费系统资源。

    简单的说,单例模式生成的实例只被生成一次,而且只负责一个特定的任务。

    使用单例模式有下面几个要求:

    1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;

    2.拥有一个保存类的实例的静态成员变量;

    3.拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化);

    4.如果严谨的话,还需要创建__clone()方法防止对象被复制(克隆)。(我上面没创建)

  • 相关阅读:
    遭遇争强好胜
    Redis学习笔记一:数据结构与对象
    Lua模块测试
    SQL JOIN
    Error:(1, 1) java: 非法字符: ‘ufeff’
    Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
    HTTPS为什么又快又安全?
    QA
    linux日志分割、去重、统计
    Maven:dependency scope
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/9262478.html
Copyright © 2011-2022 走看看