博主信息
博文 49
粉丝 0
评论 1
访问量 55941
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
与单例设计模式的初次邂逅
失去过去的博客
原创
928人浏览过
  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());

运行实例 »

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


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学