PHP 设计模式 单例模式(Singleton)

学习设计模式是一个痛苦的过程,记录一下学习过程。设计模式有点类似于太极拳,谁都能略知一二,而真正能运用自如,难度却很大。下边将用PHP作为开发语言,来学习设计模式,今天先从最简单的模式开始——单例模式(Singleton)。

1、定义

Singleton(单例或者单件)模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2、代码示例

<?php
    class Singleton{
        private static $_instance = NULL;

        private function __construct(){
            echo "construct!";    
        }   
    
        public static function getInstance(){
            if(self::$_instance === NULL){
                self::$_instance = new Singleton();
            }   
            return self::$_instance;
        }   
    
        public function __clone()
        {   
            die( "No cloning!" );
        }   

        //下边是这个类的其他方法
        public function test()
        {   
            echo "test!";
        }   
    }   

这段代码就实现了PHP单例模式。是不是现在还是一头雾水呢?这是在干嘛?这样做有什么好处?这个模式怎么用?

3、单例模式初体验

3.1 代码一

$a = new Singleton();//由于__construct是private类型,所以会报错
这说明你是不能这么进行实例化的。

3.2 代码二

$a = Singleton::getInstance();
$a->test();
输出: "construct!test!" 这个也不出我们所料,这个是通过类方法获取到了一个实例,然后执行了test。但是注意这个地方是执行了一下__construct的。

3.3 代码三

$a = Singleton::getInstance();
$a->test();
$b = Singleton::getInstance();
$b->test();
输出:"construct!test!test!"。查看这个结果,你是否发现了点问题呢?这个地方只输出了一个construct。也就是说只对类Singleton进行了一次实例化,而第二个对象$b用的实例和$a用的是同一个,即$a和$b都是同一个对象。这也就是为什么叫单例或者单件了。在同一上下文中只有一个Singleton的实例。

4、单例模式思考

4.1 单例模式保证了一个类只提供一个实例。这个实例是通过getInstance类方法获取到的。

4.2 如果全局资源(比如数据库、配置表、日志等)只能有一个实例的时候,就可以使用单例设计模式。

4.3 对比JAVA单例设计模式,PHP由于没有多线程,所以不用考虑线程安全性。

5、单例设计模式总结

PHP单例模式注意三点:

1)、实现一个private __construct

2)、提供一个获取实例的getInstance

3)、屏蔽clone方法

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值