码迷,mamicode.com
首页 > Web开发 > 详细

PHP单例模式

时间:2018-07-04 13:27:28      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:数据   code   pre   通过   tab   color   fun   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()方法防止对象被复制(克隆)。(我上面没创建)

PHP单例模式

标签:数据   code   pre   通过   tab   color   fun   php文件   访问   

原文地址:https://www.cnblogs.com/zhouguowei/p/9262478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!