一、数据库连接通用类

  重要的接口:

  接口用来存储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");}
}
?>

转载于:https://www.cnblogs.com/suvllian/p/5884584.html

PHP与MySQL设计模式:代理模式相关推荐

  1. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

  2. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

  3. 设计模式——代理模式

    设计模式--代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ...

  4. 23种设计模式----------代理模式(一)

    代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...

  5. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

  6. 第四章 Caché 设计模式 代理模式

    文章目录 第四章 Caché 设计模式 代理模式 定义 类型 使用场景 优点 缺点 结构图 完整示例 抽象主题类 真实主题类 代理类 对象类 调用 思考 第四章 Caché 设计模式 代理模式 定义 ...

  7. Android常见设计模式——代理模式(Proxy Pattern)(二)

    文章目录 1. 前言 2. 远程代理(Remote Proxy) 3. 后记 1. 前言 在上篇Android常见设计模式--代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对 ...

  8. sheng的学习笔记-设计模式-代理模式

    原理图: 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. 至少在以下集中情况下可以用 ...

  9. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

  10. 简说设计模式——代理模式

    一.什么是代理模式 关于代理模式,我们听到的见到的最多的可能就是静态代理.动态代理之类的,当然还有大家都知道的Spring Aop,这里我们先不谈这些个代理,先说个简单的例子.游戏代练应该都听说过,许 ...

最新文章

  1. TensorFlow分布式详解
  2. REPL (read-evaluate-print-loop)概念-读取评估打印循环
  3. shell 补齐路径_bash shell:命令的文件名自动补全设置
  4. (文末有福利)口罩检测覆盖公有云、私有化及SDK等形态,拿来即用精准高效
  5. 设有两个16位整数变量A和B,试编写完成下述操作的程序。
  6. ios nsstring根据ascii码大小排序_iOS(NSPredicate) 谓词的使用
  7. (37)FPGA面试题实现约翰逊计数器
  8. Jquery Uploadify插件+Servlet解决FTP多文件上传
  9. 洛谷——P1024 [NOIP2001 提高组] 一元三次方程求解
  10. Linux下QT创建项目错误处理
  11. Java图形编程实验总结_实验二java图形界面编程2015级.doc
  12. Windows FindFirstFile利用
  13. cxfservlet_webService框架CXF的简单使用
  14. mysql双机热备份
  15. 网站域名备案密码的获取方法
  16. 基于深度学习智能问答笔记
  17. 正六边形:判断点是否在正六边形内
  18. XML系列(一)------初识XML
  19. 三阶魔方CFOP还原方法图解
  20. 文件中的EOF是什么

热门文章

  1. iOS开发学习记录【整理】
  2. 用Intel线程构建块进行安全、可伸缩性的并行编程
  3. zone watermark水位控制
  4. 学习Linux必备的硬件基础一网打尽
  5. Netlink 0002 -- 什么是Netlink
  6. DPDK分析——KNI
  7. linux内核奇遇记之md源代码解读之六
  8. NP-Hard问题浅谈
  9. 功夫小子实践开发-开发环境的基本搭建和配置
  10. 【数据结构】--章节2.2----线性表的顺序表示和实现