一、数据库连接通用类

  重要的接口:

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

PHP与MySQL设计模式:代理模式的更多相关文章

  1. 9. 星际争霸之php设计模式--代理模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. C++设计模式——代理模式

    前言 青春总是那样,逝去了才开始回味:大学生活也是在不经意间就溜走了,现在上班的时候,偶尔还会怀念大学时,大家在一起玩游戏的时光.大学喜欢玩游戏,但是可悲的校园网,速度能把人逼疯了:还好,后来搞了一个 ...

  3. PHP设计模式-代理模式

    概念理解: 代理模式,是对简单处理程序(或指针)的增强,用于引用一个对象:这个指针被代理对象取代,代理对象位于客户端和真实程序之间,指针有一个可被多个目标利用的钩子. 参与者: client(参与者) ...

  4. Java设计模式-代理模式之动态代理(附源代码分析)

    Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...

  5. 浅谈Python设计模式 - 代理模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 一.在某些应用中,我们想要在访问某个对象之前执行一个或者多个重要的操作,例如,访 ...

  6. Java 之 设计模式——代理模式

    设计模式——代理模式 一.概述 1.代理模式 (1)真实对象:被代理的对象 (2)代理对象:代理真实对象的 (3)代理模式:代理对象代理真实对象,达到增强真实对象功能的目的 二.实现方式 1.静态代理 ...

  7. [Head First设计模式]抢票中的设计模式——代理模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  8. JAVA 设计模式 代理模式

    用途 代理模式 (Proxy) 为其他对象提供一种代理以控制对这个对象的访问. 代理模式是一种结构型模式. 结构

  9. Java设计模式 - 代理模式

    1.什么是代理模式: 为另一个对象提供一个替身或占位符以访问这个对象. 2.代理模式有什么好处: (1)延迟加载 当你需要从网络上面查看一张很大的图片时,你可以使用代理模式先查看它的缩略图看是否是自己 ...

  10. 深入浅出设计模式——代理模式(Proxy Pattern)

    模式动机在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用.代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到 ...

随机推荐

  1. 【题解】 [HNOI2015]落忆枫音 (拓扑排序+dp+容斥原理)

    原题戳我 Solution: (部分复制Navi_Aswon博客) 解释博客中的两个小地方: \[\sum_{\left(S是G中y→x的一条路径的点集\right))}\prod_{2≤j≤n,(j ...

  2. nowcoder106I Neat Tree (单调栈)

    Richard神犇出给nowcoder的题 用单调栈找到每个点它向右和向左的第一个大于或小于它的位置,然后它作为最大值/最小值的区间就要在这个范围里,那么它的贡献就是这个区间长度乘一乘再减一减 注意一 ...

  3. Kruskal重构树学习笔记+BZOJ3732 Network

    今天学了Kruskal重构树,似乎很有意思的样子~ 先看题面: BZOJ 题目大意:$n$ 个点 $m$ 条无向边的图,$k$ 个询问,每次询问从 $u$ 到 $v$ 的所有路径中,最长的边的最小值. ...

  4. OAuth2的基本概念的理解

    书籍推荐 OAuth2 in Action -- 原理 OAuth2 Cookbook -- 实践 OAuth2 解决的问题域 开放系统间授权 社交联合登录 开放API平台 现代微服务安全 单页浏览器 ...

  5. Mysql(五) JDBC

    一.JDBC JDBC(Java DataBase Connectivity) 是Java 数据库连接API.    JDBC完成三件事: 与一个数据库连接          向数据库发送SQL语句 ...

  6. bootstrap 全局 CSS 样式

    http://v3.bootcss.com/css/#less-mixins-utility 深入了解 Bootstrap 底层结构的关键部分,包括我们让 web 开发变得更好.更快.更强壮的最佳实践 ...

  7. 图形化调试工具DDD

    ubuntu安装DDD: sudo apt-get install ddd If you still need to compile it for some reason you should be ...

  8. java基础基础总结----- Math(随机数)

    前言:math类中感觉最好玩的应该就是随机数 代码: package com.day13.math; import java.util.Random; /** * 类说明 :Math * @autho ...

  9. ZCMU 1894: Power Eggs

    http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1894 题意: 有M个鹰蛋,N层楼,鹰蛋的硬度是E,也就是说在1~E层楼扔下去不会碎,E+1层楼扔 ...

  10. Linux iptables常用命令的使用

    为什么会有本文 因为最近帮一个朋友布署一个上网梯子,他那边本来用的是v2ray,但是他想用ssr,但是安装配置ssr过程中出了很多问题,比如linux内核版本4.9有点老,不支持bbr加速.无法连接s ...