PHP设计模式之单例模式

实习大半年一直都是在写业务代码,并没有去刻意去研究设计模式,只是偶尔看一下博客,草草了解而已,都不是特别懂。最近一段时间才想起学习设计模式。(大神勿喷)

学习思路:
学习一种设计模式首先还是要了解这个设计模式的特点,以及用来解决什么问题,以及有哪些使用案例

引导一(单例的特点):

 1. 该类确保自己只有一个实例。
 2. 该类必须自己创建自己的实例。
 3. 该类必须为其他对象提供唯一的实例。
 说白了就是只能有一个实例,无论你new多少次  都是产生同一个对象。

引导二(单例用来解决什么问题)

1.解决重复实例化某个类,造成资源浪费

引导三(那些地方用了单例)

1.最常见的就是数据操作类

具体实现代码如下:

    class single{

        //单一链接对象
        private static $instance;
        //私有化构造方法
        private function __construct()
        {

        }
        //提供一个外部访问接口
        public static function getinstance()
        {
            if(!isset(self::$instance)){

                self::$instance = new self();
            }
            return self::$instance;
        }

        private function __clone(){
            die('你想干嘛!!');
        }



    }

var_dump(single::getinstance());
var_dump(single::getinstance());

运行后可以看到两个打印出来的对象是一样的, 这样就实现了单例的特点就是只有一个实例,并且这个实例是在内部自己创建的
接下来是实现一个简单的数据库操作类示例 代码如下:

class DataBase{

    private function __construct(){
        try{
            $this->db = new PDO("mysql:host=127.0.0.1;post=3306;dbname=newecms","root","");
            $this->db->exec('SET NAMES UTF8');
        }catch (PDOException $e){
            echo $e->getMessage();die('错误');
        }

    }

    private $db = null;
    private static $instance;

    public static function getInstance(){
        if(!isset(self::$instance)){

            self::$instance = new self();
        }
        return self::$instance;
    }

    private function __clone(){

    }
    public function getDb(){
            return $this->db;
    }

    public function select(){
        $res = $this->db->query('select * from wen_ushop');
        return $res->fetchAll() ;
    }

}

//var_dump($db->getDb());
$db = DataBase::getInstance();
var_dump($db->select());

简单实现了下数据操作类,并没有具体实现详细的方法,有兴趣的朋友可以自己加上

这是我对单例的理解,以及学习思路 欢迎批评指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值