####代理模式
- 组成
- 抽象角色:通过接口或抽象类生命真实角色实现的业务方法
- 代理角色:实现抽象角色,是真是角色的代理
- 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑 #####实现Mysql连接类
/**
* Created by PhpStorm.
* User: gewenrui
* Date: 16/3/13
* Time: 上午8:16
*/
namespace db;
//php允许借口存储常量
interface IConnectInfo{
//服务器名称
const HOST = "localhost";
//用户名
const USERNAME = "root";
//密码
const PASSWORD = "";
//数据库名称444444444444444444444
const DBNAME ="proxylog";
public function doConnect();
}
class UniversalConnect implements IConnectInfo{
//实现了作用域解析操作符来访问连接值
//静态变量处理速度优势,提供私有可见性提供的封装性
private static $server = IConnectInfo::HOST;
private static $currentDB = IConnectInfo::DBNAME;
private static $username = IConnectInfo::USERNAME;
private static $password = IConnectInfo::PASSWORD;
private static $hookup;
public function doConnect()
{
//连接数据库
self::$hookup = mysqli_connect(self::$server,self::$username,self::$password,self::$currentDB);
if(self::$hookup){
echo "Successfucl connection to MYSQL"."</br>";
}else if(mysqli_connect_error(self::$hookup)){
echo "".mysqli_connect_error();
}
return self::$hookup;
}
}
######进行新建表操作
class CreateTable{
//设置表名
private $tableMaster = "proxyLog";
private $hookup;
public function __construct()
{
$this->tableMaster = "proxyLog";
$this->hookup = UniversalConnect::doConnect();
$drop = "DROP TABLE IF EXITS $this->tableMaster"."</br>";
//echo $drop;
if($this->hookup->query($drop) == true){
printf("Old table %s has been dropped"."</br>",$this->tableMaster);
}
$sql = "CREATE TABLE $this->tableMaster (uname VARCHAR(15),pw VARCHAR(120))";
//echo $sql;
if($this->hookup->query($sql) == true){
echo "Table{$this->tableMaster} has been created successful";
}
$this->hookup->close();
}
}
######向表中添加数据
class HashRegister{
public function __construct()
{
$this->tableMaster = "proxyLog";
$this->hookup = UniversalConnect::doConnect();
$username = $this->hookup->real_escape_string(trim($_POST['uname']));
$password = $this->hookup->real_escape_string(trim($_POST['pw']));
$sql = "INSERT INTO $this->tableMaster(uname,pw) VALUES('$username',md5('$password'))";
echo $sql;
if($this->hookup->query($sql)){
echo "registeration conpleted";
}else if($result = $this->hookup->query($sql) == false){
printf("Invalid query : %s while query %s");
exit();
$this->hookup->close();
}
}
}
#####代理模式实现用户登陆
<?php
/**
* Created by PhpStorm.
* User: gewenrui
* Date: 16/3/13
* Time: 上午10:35
*/
include "demo26.php";
interface ISubject{
function request();
}
//生成一个客户端接受用户post的数据
//实现登陆代理
class Client{
private $proxy;
private $un;
private $pw;
public function __construct()
{
$this->tableMaster = "proxyLog";
$this->hookup = \db\UniversalConnect::doConnect();
$this->un = $this->hookup->real_escape_string(trim($_POST['uname']));
$this->pw = $this->hookup->real_escape_string(trim($_POST['pw']));
//代理模式
$this->getIface($this->proxy = new Proxy());
}
public function getIface(ISubject $proxy){
$proxy->login($this->un,$this->pw);
}
}
//代理类
class Proxy implements ISubject{
private $tableMaster;
private $hookup;
private $logGood;
private $realSubject;
public function login($uNow,$pwNow){
$uname = $uNow;
$pw = md5($pwNow);
$this->logGood = false;
$this->tableMaster = "proxyLog";
$this->hookup = \db\UniversalConnect::doConnect();
$sql = "SELECT pw from $this->tableMaster WHERE uname = '$uname'";
if($result = $this->hookup->query($sql)){
$row = $result->fetch_array(MYSQLI_ASSOC);
echo $pw;
if($row['pw'] == $pw){
$this->logGood = true;
}
$result->close();
}else if(($result = $this->hookup->query($sql)===false)){
printf("failed %s",$this->hookup->error);
exit();
}
$this->hookup->close();
if($this->logGood){
//执行request方法
$this->request();
}else{
echo "username and/or password not on record";
}
}
public function request()
{
$this->realSubject = new RealSubject();
$this->realSubject ->request();
}
}
class RealSubject implements ISubject{
public function request()
{
$practice = <<<REQUEST
<html>
<head><body><head> data </head>
<body>
1. fuck u silly b
</body>
</html>
REQUEST;
echo $practice;
}
}
$data = new Client();