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

2020-03-29  本文已影响0人  江江简书

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

代码实现

<?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参数到每一个方法才能真正实现你想要的方法

上一篇下一篇

猜你喜欢

热点阅读