php单例模式

单例模式:一个类只能有一个实例(只能实例化一次)

 

为何用单例模式:

一、为了防止资源浪费。

二、实例控制

单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。

三、灵活性

因为类控制了实例化过程,所以类可以灵活更改实例化过程。

 

 

应用场景:

1.PHP的应用有一个大方面是针对于数据库,一个应用中会存在大量的数据库操作,在使用面向对象的方式开发时,如果使用单例模式,就可以避免大量的new 操作消耗的资源,还可以减少数据库连接,这样就不容易出现too many connections情况。

2.如果一个系统中需要一个类来全局控制某些配置信息,那么,使用单例模式可以很方便的实现。

3. 网站的计数器,一般也是采用单例模式实现,否则难以同步。

4. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。


 

 

特点是什么?

    final标识的类【禁止继承】

    私有构造函数【防止类外实例化】

    私有克隆方法【禁止被克隆】

    私有静态属性【保存类的实例对象】

    公有静态函数【调用类的接口】

    以上行为的目的:防止程序重新实例化【消费新的资源】

 

<?php  
final class single{

    private $rand = 0;
    // 存放实例化的对象
    static private $obj = null;

    // 防止类外实例化
    private function __construct(){
        return $this->rand = mt_rand(1,99999);
    }


    // 调用类的接口
    static  public function usb(){
        if(!self::$obj){
            self::$obj = new single();
        }
        return self::$obj;
    }

    public function fff(){
        echo $this->rand;
    }


    // 防止用户克隆
    private function __clone(){
        echo '禁止克隆!';
    }

}

$single1 = single::usb();
$single2 = single::usb();
print_r($single1);
print_r($single2);
$single2 ->fff();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值