PHP MySql代理模式_PHP代理模式
2017-05-23 13:43:06  By: dwtedx

一、数据库连接通用类

重要的接口

接口用来存储MySQL连接数据、实现这个接口的类都可以使用这些数据

通过接口可以隔离出程序中一个简单而必要的部分、任何程序都可以实现这个接口

接口通过interface来定义、通过implements实现

<?php
//文件名IConnectInfo.php
interface IConnectInfo
{
    const Host     = "localhost";
    const UserName = "root";
    const Password = "";
    const DBName   = "bergift";
    
    public function doConnect();
}
?>


二、通用MySQL连接类和静态变量

接口实现都通过域解析操作符来连接访问值、使用私有静态变量接收、可以使用静态变量处理的速度优势、还可以保证封装性、尽量避免使用全局变量、全局变量会破坏封装、静态变量有助于减少类的实例化

<?php
include_once(´IConnectInfo.php´);
class UniversalConnect implements IConnectInfo
{
    private static $Server    = IConnectInfo::Host;
    private static $CurrentDB = IConnectInfo::DBName;
    private static $User      = IConnectInfo::UserName;
    private static $Password  = IConnectInfo::Password;
    private static $HookUp;
    
    public function doConnect(){
        self::$HookUp = mysqli_connect(self::$Server,self::$User,self::$Password,self::$CurrentDB);
        
        if(self::$HookUp){
            
        }elseif(mysqli_connect_error(self::$HookUp)){
            echo "Fail: ".mysqli_connect_error;
        }
        return self::$HookUp;
    }
}
?>


通过一个类和接口实现简单的连接操作、可大大减少开发的时间、修改很容易、所有信息都存储在常量中


三、代理模式

保护代理在验证过请求之后、才会把请求发送到真实主题、这个真实主题就是请求的目标、如访问数据库信息、个人理解:用户发送请求、代理模块接收到请求之后、转到验证模块、正确则返回真值、代理模块再导向真正请求的目标

通过通用类完成数据库的连接、数据库的选择、通用类包括:包含数据库信息的接口、实现数据库连接的类、保护代理包括:接口、实现校验的代理模块、实现的客户端对象类

流程:登录页面——>Client.php(实现的客户端对象类)——>Proxy.php(代理模块)——>使用通用类连接数据库进行判断、正确则返回代理真值——>代理将页面导向至realProject.php进行处理


代理的作用是确保有权限的用户才能访问网站、可以把代理模式中代理参与者看做是一个场所、在用户访问真实主题前可以在这里做一些真正确保高安全性的操作、代理模块是一个简单的口令检查、可以调用一个高安全性模块来处理敏感信息


接口文件

<?php
//文件名ISubject.php
Interface ISubject
{
    function request();
}
?>


代理类

<?php
//文件名Proxy.php
include_once(´ISubject.php´);
include_once(´RealSubject.php´);
include_once(´UniversalConnect.php´);

class Proxy implements ISubject
{
    private $TableMaster;
    private $HookUp;
    private $LoginSuccess;
    private $RealSubject;
    
    public function login($UserNow,$PassNow)
    {
        $UserName = $UserNow;
        $PassWord = md5($PassNow);
        $this->LoginSuccess = false;
        $this->TableMaster  = "BAdmin";
        $this->HookUp        = UniversalConnect::doConnect();
        
        $sql = "SELECT password from $this->TableMaster WHERE username = ´$UserName´";
        if($result = $this->HookUp->query($sql))
        {
            $row = $result->fetch_array(MYSQLI_ASSOC);
            if($row[´password´]==$PassWord)
            {
                $this->LoginSuccess = true;
            }
            $result->close();
        }
        elseif(($result = $this->HookUp->query($sql))===false)
        {
            echo "Failed".$this->HookUp->error;
            exit();
        }
        $this->HookUp->close();
        if($this->LoginSuccess)
        {
            $this->request();
        }
        else
        {
            header("Location:index.php");
        }
    }
    public function register($UserNow,$PassNow)
    {
        $UserName = $UserNow;
        $PassWord = md5($PassNow);
        $this->LoginSuccess = false;
        $this->TableMaster  = "BAdmin";
        $this->HookUp        = UniversalConnect::doConnect();
        
        $sql = "INSERT INTO $this->TableMaster VALUES(´$UserName´,´$PassWord´)";
        if($result = $this->HookUp->query($sql))
        {
            $this->LoginSuccess = true;
        }
        elseif(($result = $this->HookUp->query($sql))===false)
        {
            echo "Failed".$this->HookUp->error;
            exit();
            //header("Location:index.php");
        }
        $this->HookUp->close();
        if($this->LoginSuccess)
        {
            echo "<script>alert(´Success!´);</script>";
        }
        else
        {
            header("Location:index.php");
        }
    }
    public function request()
    {
        $this->realSubject = new RealSubject();
        $this->realSubject->request();
    }
}
?>


接收客户端发送的信息的Client类、发送消息到代理类进行验证

<?php
//文件名Client.php
include_once(´Proxy.php´);
class Client
{
    private $Proxy;
    private $UserName;
    private $PassWord;
    
    public function __construct()
    {
        $this->TableMaster = ´BAdmin´;
        $this->HookUp      = UniversalConnect::doConnect();
        $this->UserName    = $this->HookUp->real_escape_string(trim($_POST[´username´]));
        $this->PassWord    = $this->HookUp->real_escape_string(trim($_POST[´password´]));
        if($_GET[´do´]===´register´)
        {
            $this->getRegis($this->proxy=new Proxy());
        }elseif($_GET[´do´]===´login´)
        {
            $this->getIface($this->proxy=new Proxy());
        }
    }
    private function getIface(ISubject $proxy)
    {
        $proxy->login($this->UserName,$this->PassWord);
    }
    private function getRegis(ISubject $proxy)
    {
        $proxy->register($this->UserName,$this->PassWord);
    }
}
$Worker = new Client();
?>


真实主题、只能由代理类进入

<?php
//文件名RealSubject.php
include_once(´ISubject.php´);
class RealSubject implements ISubject
{
    public function request()
    {
        session_save_path(dirname(__FILE__).´/sess/´);
        @session_start();
        $_SESSION[´bergift´] = ´admin´;
        header("Location:main.php");
    }
}
?>


若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


猜你喜欢的

快速评论


技术评论

DD记账
top
+