本次代码符合PHP规范PRS_0,根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录),统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)

index.php 公共部分

define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');

Loader.php

<?php

namespace Frame;

class Loader
{
    static function autoload($class)
    {
        require  BASEDIR.'/'.str_replace('\\','/',$class).'.php';
    }
}

适配器模式

  • 简单点来说,比如一个开发团队,有些开发人员的环境只有mysql、有些开发人员的环境只有PDO,有些开发人员的环境只有mysqli,这个时候适配器就可以轻松的帮我们解决这个问题。首先我们声明一个接口 IDatabase.php 类来约定适配器的行为。

    <?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类

    <?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类

    <?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类

    <?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中调用,这样开发人员就可以根据自己的环境去使用不同的数据库连接方式了。

    <?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();
Last modification:September 3, 2022
如果觉得我的文章对你有用,请随意赞赏