博客列表 >与单例设计模式的初次邂逅

与单例设计模式的初次邂逅

失去过去的博客
失去过去的博客原创
2019年07月20日 18:54:50736浏览
  1. 单例模式

    1. 单例模式是所有语言中最合适php的模式 ,也是学习过程中最常用的模式 例如 数据库连接类

    2. 设计模式的目的是用来防止 重复初始化或者new ,占用内存空间,达到优化目的的一种设计模式 


    2.三个要素

           1.保存一个唯一的一个静态成员属性 

             2.__construct 和 __clone 两个魔术方法需要声明私有的  private 防止外部克隆和重复创建

                3. 需要保存一个返回唯一实例的静态方法 提供外部调用返回 唯一实例

模式结构

<?php

class Demo
{

    //设置唯一实例并设置为空,
    private static $obj = null;
    //私有化构造方法
    private function __construct()
    {
    }
    //私有化克隆方法
    private function  __clone()
    {
    }
    //返回唯一实例的静态方法
    public static function getInstence()
    {
        if (self::$obj == null){
            self::$obj = new self;

        }
        return self::$obj;
    }

}
$exp1 = new Demo();
$obj1 = $exp1::getInstence();
$exp2 = new Demo();
$obj2 = $exp2::getInstence();
var_dump($exp1==$exp2);
echo "<hr>";
var_dump($obj1==$obj2);
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例




数据库连接实例

<?php

class Db
{
//数据库连接类


    //设置唯一实例并设置为空,保存唯一的一个返回全局实例
    private static $obj = null;
    //数据库连接句柄
    private  $con;
        //类常量
    const HOSTNAME = '127.0.0.1';
    const USERNAME = 'root';
    const PASSWORD = 'root';
    const DBNAME = 'video';
    //私有化构造方法
    private function __construct()
    {
        //初始化连接
            $this->con = mysqli_connect(self::HOSTNAME,self::USERNAME,self::PASSWORD,self::DBNAME);
    }
    //私有化克隆方法
    private function  __clone()
    {
    }
    //返回唯一实例的静态方法
    public static function getInstence()
    {
        if (self::$obj == null){
            self::$obj = new self;

        }
        return self::$obj;
    }
    public function getInfo()
    {
        $sql = "SELECT * FROM member WHERE id >2";
        $res = mysqli_query($this->con,$sql);

        $userinfo = [];
            foreach (mysqli_fetch_all($res) as $k =>$v){
                $userinfo[$k] = $v;
            }
        return $userinfo;

    }

}
echo "<pre>";
$obj =  Db::getInstence();
$obj2 =  Db::getInstence();
var_dump($obj==$obj2);
echo "<hr>";
print_r($obj->getInfo());

运行实例 »

点击 "运行实例" 按钮查看在线实例


上一条:github使用下一条:0718改留言板
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议