国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Home 類庫下載 PHP類庫 PHP and MySQL design patterns: proxy pattern

PHP and MySQL design patterns: proxy pattern

Oct 09, 2016 pm 01:14 PM

一、數(shù)據(jù)庫連接通用類

  重要的接口:

  接口用來存儲MySQL連接數(shù)據(jù)。實現(xiàn)這個接口的類都可以使用這些數(shù)據(jù)。

  通過接口可以隔離出程序中一個簡單而必要的部分,任何程序都可以實現(xiàn)這個接口。

  接口通過interface來定義,通過implements實現(xiàn)。

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

通用MySQL連接類和靜態(tài)變量:

  接口實現(xiàn)都通過域解析操作符來連接訪問值。使用私有靜態(tài)變量接收,可以使用靜態(tài)變量處理的速度優(yōu)勢,還可以保證封裝性。

  盡量避免使用全局變量,全局變量會破壞封裝。靜態(tài)變量有助于減少類的實例化。

<?php
include_once(&#39;IConnectInfo.php&#39;);
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;
    }
}
?>

通過一個類和接口實現(xiàn)簡單的連接操作,可大大減少開發(fā)的時間,修改很容易,所有信息都存儲在常量中。

  代理模式:

  保護(hù)代理在驗證過請求之后,才會把請求發(fā)送到真實主題。這個真實主題就是請求的目標(biāo),如訪問數(shù)據(jù)庫信息。

  個人理解:用戶發(fā)送請求,代理模塊接收到請求之后,轉(zhuǎn)到驗證模塊,正確則返回真值,代理模塊再導(dǎo)向真正請求的目標(biāo)。

  通過通用類完成數(shù)據(jù)庫的連接,數(shù)據(jù)庫的選擇。

  通用類包括:包含數(shù)據(jù)庫信息的接口、實現(xiàn)數(shù)據(jù)庫連接的類。

  保護(hù)代理包括:接口、實現(xiàn)校驗的代理模塊、實現(xiàn)的客戶端對象類。

  流程:登錄頁面——>Client.php(實現(xiàn)的客戶端對象類)——>Proxy.php(代理模塊)——>使用通用類連接數(shù)據(jù)庫進(jìn)行判斷,正確則返回代理真值——>代理將頁面導(dǎo)向至realProject.php進(jìn)行處理。

  代理的作用是確保有權(quán)限的用戶才能訪問網(wǎng)站。

  可以把代理模式中代理參與者看做是一個場所,在用戶訪問真實主題前可以在這里做一些真正確保高安全性的操作。

  代理模塊是一個簡單的口令檢查,可以調(diào)用一個高安全性模塊來處理敏感信息。

  接口文件

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

代理類

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

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 = &#39;$UserName&#39;";
        if($result = $this->HookUp->query($sql))
        {
            $row = $result->fetch_array(MYSQLI_ASSOC);
            if($row[&#39;password&#39;]==$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(&#39;$UserName&#39;,&#39;$PassWord&#39;)";
        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(&#39;Success!&#39;);</script>";
        }
        else
        {
            header("Location:index.php");
        }
    }
    public function request()
    {
        $this->realSubject = new RealSubject();
        $this->realSubject->request();
    }
}
?>

接收客戶端發(fā)送的信息的Client類,發(fā)送消息到代理類進(jìn)行驗證。

<?php
//文件名Client.php
include_once(&#39;Proxy.php&#39;);
class Client
{
    private $Proxy;
    private $UserName;
    private $PassWord;
    
    public function __construct()
    {
        $this->TableMaster = &#39;BAdmin&#39;;
        $this->HookUp      = UniversalConnect::doConnect();
        $this->UserName    = $this->HookUp->real_escape_string(trim($_POST[&#39;username&#39;]));
        $this->PassWord    = $this->HookUp->real_escape_string(trim($_POST[&#39;password&#39;]));
        if($_GET[&#39;do&#39;]===&#39;register&#39;)
        {
            $this->getRegis($this->proxy=new Proxy());
        }elseif($_GET[&#39;do&#39;]===&#39;login&#39;)
        {
            $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();
?>

 真實主題,只能由代理類進(jìn)入。

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


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)