찾다
类库下载PHP类库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(&#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;
    }
}
?>

通过一个类和接口实现简单的连接操作,可大大减少开发的时间,修改很容易,所有信息都存储在常量中。

  代理模式:

  保护代理在验证过请求之后,才会把请求发送到真实主题。这个真实主题就是请求的目标,如访问数据库信息。

  个人理解:用户发送请求,代理模块接收到请求之后,转到验证模块,正确则返回真值,代理模块再导向真正请求的目标。

  通过通用类完成数据库的连接,数据库的选择。

  通用类包括:包含数据库信息的接口、实现数据库连接的类。

  保护代理包括:接口、实现校验的代理模块、实现的客户端对象类。

  流程:登录页面——>Client.php(实现的客户端对象类)——>Proxy.php(代理模块)——>使用通用类连接数据库进行判断,正确则返回代理真值——>代理将页面导向至realProject.php进行处理。

  代理的作用是确保有权限的用户才能访问网站。

  可以把代理模式中代理参与者看做是一个场所,在用户访问真实主题前可以在这里做一些真正确保高安全性的操作。

  代理模块是一个简单的口令检查,可以调用一个高安全性模块来处理敏感信息。

  接口文件

<?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();
    }
}
?>

接收客户端发送的信息的Client类,发送消息到代理类进行验证。

<?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();
?>

 真实主题,只能由代理类进入。

<?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");
    }
}
?>


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)