php接口实现多数据库的增删改查内嵌单例模式

前言:公司项目没有用到框架开发,所有的东西都是自己编写的,但是慢慢的发现前辈封装的方法,有些鸡肋同时每次调用的时候都要人为手动的删除数据库的连接同时也没有实现单例,如果实例化较多后会给项目带来资源的浪费,想着能不能在这个基础上优化一下项目

代码实现

<?php
/**
 * Created by PhpStorm.
 * User: jiangshiwen
 * Date: 2020/3/29
 * Time: 13:04
 */

/**
 * Interface Db
 * 实现一个数据的接口方法
 */
interface Db{
    function add();//增加
    function delete();//删除
    function update();//修改
    function query();//查找
}

/**
 * Class mysqlDb
 * 实现mysql的增删改查方法
 */
class mysqlDb implements Db{
    //创建静态私有的变量保存该类对象
    static private $instance;
    private $myconnobj = '';//用来保存连接的参数
    //防止使用clone克隆对象
    private function __clone(){}
    //定义一个连接对象的obj

    /**
     * 实现数据库的连接
     */
    function __construct(){
        //在这里实现mysql连接参数的配置连接
        $this->myconnobj =  'obj';
    }

    /**
     * @return mysqlDb
     * 实例化
     */
    static public function getInstance()
    {
        //判断$instance是否是Singleton的对象,不是则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    /**
     * 用来myql增加的方法
     */
    function add(){
        echo '我是mysql-增加方法'.'<pre />';
    }

    /**
     * 删除方法
     */
    function delete()
    {
        echo '我是mysql-delete'.'<pre />';
    }
    /**
     * 修改方法
     */
    function update()
    {
        echo '我是mysql-update'.'<pre />';
    }
    /**
     * 查找方法
     */
    function query()
    {
        echo '我是mysql-query'.'<pre />';
    }

    /**
     * 销毁连接
     */
    function __destruct(){
        echo 'mysql断开所有的连接参数'.'<pre />';
    }
}

/**
 * Class sqlser
 * 实现sqlser的增删改查
 */
class sqlser implements Db{
    private $myconnobj = '';//用来保存连接的参数
    static private $instance;//返回实例化的对象
    //防止使用clone克隆对象
    private function __clone(){}

    /**
     * @return sqlser
     * 实现单例的方法
     */
    static public function getInstance()
    {
        //判断$instance是否是Singleton的对象,不是则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    /**
     * 实现数据库的连接
     */
    function __construct(){
        //在这里实现sql连接参数的配置连接
        $this->myconnobj =  'obj';
    }
    /**
     * 用来myql增加的方法
     */
    function add(){
        echo '我是sqser-增加方法'.'<pre />';
    }

    /**
     * 删除方法
     */
    function delete()
    {
        echo '我是sqser-delete'.'<pre />';
    }
    /**
     * 修改方法
     */
    function update()
    {
        echo '我是sqser-update'.'<pre />';
    }
    /**
     * 查找方法
     */
    function query()
    {
        echo '我是sqser-query'.'<pre />';
    }

    /**
     * 销毁连接
     */
    function __destruct(){
        echo 'sqr断开所有的连接参数'.'<pre />';
    }

}

/**
 * Class DbFunc
 * 对外暴露调用的方法
 */
class DbFunc{

    /**
     * @param $cls
     * 实现查找的方法
     */
    public static function foreignQuery($cls){
        $cls->query();//实现查找功能
    }

    /**
     * @param $cls
     * 实现添加方法
     */
    public static function foreignAdd($cls){
        $cls->add();
    }

    /**
     * @param $cls
     * 实现删除方法
     */
    public static function foreignDel($cls){
        $cls->delete();
    }

    /**
     * @param $cls
     * 实现查找方法
     */
    public static function foreignUpd($cls){
        $cls->update();
    }
}


DbFunc::foreignQuery(mysqlDb::getInstance());
DbFunc::foreignQuery(sqlser::getInstance());
//调用查找方法
DbFunc::foreignQuery(mysqlDb::getInstance());
DbFunc::foreignQuery(sqlser::getInstance());
//调用新增方法
DbFunc::foreignAdd(mysqlDb::getInstance());
DbFunc::foreignAdd(sqlser::getInstance());
//调用删除方法
DbFunc::foreignDel(mysqlDb::getInstance());
DbFunc::foreignDel(sqlser::getInstance());
//调用修改方法
DbFunc::foreignUpd(mysqlDb::getInstance());
DbFunc::foreignUpd(sqlser::getInstance());

效果图

image.png

最后:这里只是简单的代码实现,后期肯定要自己传递sql参数到每一个方法才能真正实现你想要的方法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,333评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,812评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,016评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,293评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,650评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,788评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,003评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,741评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,462评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,681评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,168评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,528评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,169评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,119评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,846评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,719评论 2 274

推荐阅读更多精彩内容

  • 天使与魔鬼的对话 文/周国新 他一身黑衣,二目如灯,獠牙如鬼,唇红如血。他如同黑暗一样,喧嚣于古今未来。他嗜血,所...
    舒心语文阅读 618评论 0 1
  • 学不思则罔思而不学则殆。这句话从年少时候大家就经常挂在嘴边。但走过了专职的学习阶段,步入了繁忙工作时期后。...
    老林深山里阅读 54评论 0 0
  • 作者:吴军 写于2007年。吴军对百年来的IT行业的企业兴衰史和基本规律进行了描述和总结。全书12章节: 1. A...
    mindle君阅读 291评论 0 0
  • 对于说话问题的反思 上课喜欢说话,这似乎是同学们的“通病”,当然,我也不例外,有时便会自己思考,上课到底为什...
    一棵树66阅读 1,733评论 0 0