首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >适配器模式

适配器模式

作者头像
友儿
发布2022-09-11 11:40:07
发布2022-09-11 11:40:07
2860
举报
文章被收录于专栏:友儿友儿
本次代码符合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';
    }
}
适配器模式
  • 简单点来说,比如一个开发团队,有些开发人员的环境只有mysql、有些开发人员的环境只有PDO,有些开发人员的环境只有mysqli,这个时候适配器就可以轻松的帮我们解决这个问题。

首先我们声明一个接口 IDatabase.php 类来约定适配器的行为。

代码语言:javascript
复制
<?php
namespace Frame;

interface IDatabase
{
    public function connect($host, $user, $passwd, $dbname);//链接数据库
    public function query($sql); //执行sql语句
    public function close(); //关闭数据库
}

在Frame目录下创建Database目录,分别创建Mysql.php、Mysqli.php、PDO.php类(实现IDadabase类的方法) Mysql.php类

代码语言:javascript
复制
<?php

namespace Frame\Database;

use Frame\IDatabase;

class Mysql implements IDatabase
{
    protected $conn;//数据库连接对象
   
    public function connect($host, $user, $passwd, $dbname)
    {
        $conn = mysql_connect($host, $user, $passwd);//连接数据库
        mysql_select_db($dbname, $conn);//选择数据库
        $this->conn = $conn;
    }
    public function query($sql)
    {
        $res = mysql_query($sql, $this->conn);
        return $res;
    }

    public function close()
    {
        mysql_close($this->conn);
    }
}

Mysqli.php类

代码语言:javascript
复制
<?php

namespace Frame\Database;

use Frame\IDatabase;

class Mysqli implements IDatabase
{
    protected $conn;

    public function connect($host, $user, $passwd, $dbname)
    {
        $conn = mysqli_connect($host, $user, $passwd, $dbname);
        $this->conn = $conn;
    }

    public function query($sql)
    {
        $res = mysqli_query($this->conn, $sql);
        return $res;
    }

    public function close()
    {
        mysqli_close($this->conn);
    }
}

PDO.php类

代码语言:javascript
复制
<?php

namespace Frame\Database;

use Frame\IDatabase;

class PDO implements IDatabase
{
    protected $conn;

    public function connect($host, $user, $passwd, $dbname)
    {
        $conn = new \PDO("mysql:host=$host;dbanme=$dbname", $user, $passwd);
        $this->conn = $conn;
    }

    public function query($sql)
    {
        $res = $this->conn->query($sql);
        return $res;
    }

    public function close()
    {
        unset($this->conn);
    }
}

index.php中调用,这样开发人员就可以根据自己的环境去使用不同的数据库连接方式了。

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

$db = new \Frame\Database\Mysql();
//$db = new \Frame\Database\PDO();
//$db = new \Frame\Database\Mysqli();
$db->connect('127.0.0.1','root',123456,'test');
$db->query('show databases');
$db->close();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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