首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >单例模式

单例模式

作者头像
友儿
发布2022-09-11 11:41:20
发布2022-09-11 11:41:20
5760
举报
文章被收录于专栏:友儿友儿
本次代码符合PHP规范PRS_0
根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)

index.php 公共部分

代码语言:javascript
复制
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');

Loader.php

代码语言:javascript
复制
<?php

namespace Frame;

class Loader
{
    static function autoload($class)
    {
        require  BASEDIR.'/'.str_replace('\\','/',$class).'.php';
    }
}
单例模式
  • 特点
    • 不允许直接实例化对象 不允许对象克隆。
  • 场景(假如我们多个文件的创建连接一个数据库,这样就浪费了数据库资源。)

我们修改一下Database.php文件

代码语言:javascript
复制
<?php

namespace Frame;

class Database
{
    static protected $db;//保存实例
    
    private function __construct(){}//禁止new 
    private function __clone() {}//禁止克隆 
    static public function getInstance()
    {
        if (self::$db) {
            return self::$db;
        } else {
            self::$db = new self();
            return self::$db;
        }
    }
}

index.php中调用

代码语言:javascript
复制
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
$db = \Frame\Database::getInstance();//保证到数据库的连接只有一个

我们现在可以把之前的工厂模式和单例模式结合起来。 修改Factory.php

代码语言:javascript
复制
<?php

namespace Frame;

class Factory
{
     static public function  createDatabase()
     {
        //$db = new \Frame\Database();//工厂模式
        $db = Database::getInstance();//结合单例模式的工厂模式
        return $db;
     }
 }

index.php中调用

代码语言:javascript
复制
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');

\Frame\Factory::createDatabase(); 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本次代码符合PHP规范PRS_0
  • 根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
  • 统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
  • 单例模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档