PHP与MySQL设计模式:代理模式
一、数据库连接通用类
重要的接口:
接口用来存储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设计模式:代理模式相关推荐
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
- Java设计模式(代理模式-模板方法模式-命令模式)
Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...
- 设计模式——代理模式
设计模式--代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ...
- 23种设计模式----------代理模式(一)
代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...
- java设计模式代理模式_Java中的代理设计模式
java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...
- 第四章 Caché 设计模式 代理模式
文章目录 第四章 Caché 设计模式 代理模式 定义 类型 使用场景 优点 缺点 结构图 完整示例 抽象主题类 真实主题类 代理类 对象类 调用 思考 第四章 Caché 设计模式 代理模式 定义 ...
- Android常见设计模式——代理模式(Proxy Pattern)(二)
文章目录 1. 前言 2. 远程代理(Remote Proxy) 3. 后记 1. 前言 在上篇Android常见设计模式--代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对 ...
- sheng的学习笔记-设计模式-代理模式
原理图: 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. 至少在以下集中情况下可以用 ...
- 设计模式-代理模式(Proxy Pattern)
设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...
- 简说设计模式——代理模式
一.什么是代理模式 关于代理模式,我们听到的见到的最多的可能就是静态代理.动态代理之类的,当然还有大家都知道的Spring Aop,这里我们先不谈这些个代理,先说个简单的例子.游戏代练应该都听说过,许 ...
最新文章
- TensorFlow分布式详解
- REPL (read-evaluate-print-loop)概念-读取评估打印循环
- shell 补齐路径_bash shell:命令的文件名自动补全设置
- (文末有福利)口罩检测覆盖公有云、私有化及SDK等形态,拿来即用精准高效
- 设有两个16位整数变量A和B,试编写完成下述操作的程序。
- ios nsstring根据ascii码大小排序_iOS(NSPredicate) 谓词的使用
- (37)FPGA面试题实现约翰逊计数器
- Jquery Uploadify插件+Servlet解决FTP多文件上传
- 洛谷——P1024 [NOIP2001 提高组] 一元三次方程求解
- Linux下QT创建项目错误处理
- Java图形编程实验总结_实验二java图形界面编程2015级.doc
- Windows FindFirstFile利用
- cxfservlet_webService框架CXF的简单使用
- mysql双机热备份
- 网站域名备案密码的获取方法
- 基于深度学习智能问答笔记
- 正六边形:判断点是否在正六边形内
- XML系列(一)------初识XML
- 三阶魔方CFOP还原方法图解
- 文件中的EOF是什么