php教程 php手册 PHP 및 MySQL 디자인 패턴: 프록시 패턴

PHP 및 MySQL 디자인 패턴: 프록시 패턴

Sep 20, 2016 am 03:30 AM

 1. 일반 데이터베이스 연결 수업

중요 인터페이스:

인터페이스는 MySQL 연결 데이터를 저장하는 데 사용됩니다. 이 인터페이스를 구현하는 클래스는 이 데이터를 사용할 수 있습니다.

인터페이스를 통해 프로그램의 간단하고 필요한 부분을 분리할 수 있으며, 어떤 프로그램이라도 이 인터페이스를 구현할 수 있습니다.

인터페이스는 인터페이스를 통해 정의되고 구현을 통해 구현됩니다.

<?<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;">文件名IConnectInfo.php</span>
<span style="color: #0000ff;">interface</span><span style="color: #000000;"> IConnectInfo
{
    </span><span style="color: #0000ff;">const</span> Host     = "localhost"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">const</span> UserName = "root"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">const</span> Password = ""<span style="color: #000000;">;
    </span><span style="color: #0000ff;">const</span> DBName   = "bergift"<span style="color: #000000;">;
    
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> doConnect();
}
</span>?>
로그인 후 복사

일반적인 MySQL 연결 클래스 및 정적 변수:

인터페이스 구현에서는 도메인 확인 연산자를 사용하여 액세스 값을 연결합니다. 개인용 정적 변수 수신을 사용하면 정적 변수 처리 속도를 활용하고 캡슐화를 보장할 수 있습니다.

전역 변수는 캡슐화를 파괴하므로 전역 변수 사용을 피하세요. 정적 변수는 클래스 인스턴스화를 줄이는 데 도움이 됩니다.

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">include_once</span>('IConnectInfo.php'<span style="color: #000000;">);
</span><span style="color: #0000ff;">class</span> UniversalConnect <span style="color: #0000ff;">implements</span><span style="color: #000000;"> IConnectInfo
{
    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #800080;">$Server</span>    = IConnectInfo::<span style="color: #000000;">Host;
    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #800080;">$CurrentDB</span> = IConnectInfo::<span style="color: #000000;">DBName;
    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #800080;">$User</span>      = IConnectInfo::<span style="color: #000000;">UserName;
    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #800080;">$Password</span>  = IConnectInfo::<span style="color: #000000;">Password;
    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #800080;">$HookUp</span><span style="color: #000000;">;
    
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> doConnect(){
        self</span>::<span style="color: #800080;">$HookUp</span> = <span style="color: #008080;">mysqli_connect</span>(self::<span style="color: #800080;">$Server</span>,self::<span style="color: #800080;">$User</span>,self::<span style="color: #800080;">$Password</span>,self::<span style="color: #800080;">$CurrentDB</span><span style="color: #000000;">);
        
        </span><span style="color: #0000ff;">if</span>(self::<span style="color: #800080;">$HookUp</span><span style="color: #000000;">){
            
        }</span><span style="color: #0000ff;">elseif</span>(<span style="color: #008080;">mysqli_connect_error</span>(self::<span style="color: #800080;">$HookUp</span><span style="color: #000000;">)){
            </span><span style="color: #0000ff;">echo</span> "Fail: ".<span style="color: #008080;">mysqli_connect_error</span><span style="color: #000000;">;
        }
        </span><span style="color: #0000ff;">return</span> self::<span style="color: #800080;">$HookUp</span><span style="color: #000000;">;
    }
}
</span>?>
로그인 후 복사

간단한 연결 연산을 클래스와 인터페이스를 통해 구현하면 개발 시간을 대폭 단축할 수 있고, 수정이 용이하며, 모든 정보가 상수에 저장됩니다.

 에이전트 모드:

보호 에이전트는 요청을 확인한 후에만 실제 주제에 요청을 보냅니다. 이 실제 주제는 데이터베이스 정보 액세스와 같은 요청의 대상입니다.

개인적인 이해: 사용자가 요청을 보내고, 프록시 모듈이 요청을 받은 후 확인 모듈로 이동하며, 올바른 경우 참값을 반환하고 프록시 모듈은 대상으로 전달됩니다. 실제 요청.

공통 클래스를 통해 데이터베이스 연결 및 데이터베이스 선택을 완료합니다.

일반 클래스에는 데이터베이스 정보가 포함된 인터페이스와 데이터베이스 연결을 구현하는 클래스가 포함됩니다.

보호 에이전트에는 인터페이스, 검증을 구현하는 에이전트 모듈, 구현된 클라이언트 개체 클래스가 포함됩니다.

프로세스: 로그인 페이지 -> Client.php(구현된 클라이언트 객체 클래스) - > 올바른 값 -> 에이전트는 처리를 위해 페이지를 realProject.php로 보냅니다.

프록시의 역할은 승인된 사용자만 웹사이트에 접근할 수 있도록 하는 것입니다.

프록시 모드의 프록시 참가자는 사용자가 실제 주제에 접근하기 전에 높은 보안성을 보장하기 위해 몇 가지 작업을 수행할 수 있는 장소라고 볼 수 있습니다.

프록시 모듈은 민감한 정보를 처리하기 위해 보안 수준이 높은 모듈을 호출할 수 있는 간단한 비밀번호 확인입니다.

 인터페이스 파일

<?<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;">文件名ISubject.php</span>
<span style="color: #0000ff;">Interface</span><span style="color: #000000;"> ISubject
{
    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> request();
}
</span>?>
로그인 후 복사

프록시 클래스

<?<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;">文件名Proxy.php</span>
<span style="color: #0000ff;">include_once</span>('ISubject.php'<span style="color: #000000;">);
</span><span style="color: #0000ff;">include_once</span>('RealSubject.php'<span style="color: #000000;">);
</span><span style="color: #0000ff;">include_once</span>('UniversalConnect.php'<span style="color: #000000;">);

</span><span style="color: #0000ff;">class</span> Proxy <span style="color: #0000ff;">implements</span><span style="color: #000000;"> ISubject
{
    </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$TableMaster</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$HookUp</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$LoginSuccess</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$RealSubject</span><span style="color: #000000;">;
    
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> login(<span style="color: #800080;">$UserNow</span>,<span style="color: #800080;">$PassNow</span><span style="color: #000000;">)
    {
        </span><span style="color: #800080;">$UserName</span> = <span style="color: #800080;">$UserNow</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$PassWord</span> = <span style="color: #008080;">md5</span>(<span style="color: #800080;">$PassNow</span><span style="color: #000000;">);
        </span><span style="color: #800080;">$this</span>->LoginSuccess = <span style="color: #0000ff;">false</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$this</span>->TableMaster  = "BAdmin"<span style="color: #000000;">;
        </span><span style="color: #800080;">$this</span>->HookUp        = UniversalConnect::<span style="color: #000000;">doConnect();
        
        </span><span style="color: #800080;">$sql</span> = "SELECT password from <span style="color: #800080;">$this</span>->TableMaster WHERE username = '<span style="color: #800080;">$UserName</span>'"<span style="color: #000000;">;
        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$result</span> = <span style="color: #800080;">$this</span>->HookUp->query(<span style="color: #800080;">$sql</span><span style="color: #000000;">))
        {
            </span><span style="color: #800080;">$row</span> = <span style="color: #800080;">$result</span>-><span style="color: #000000;">fetch_array(MYSQLI_ASSOC);
            </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$row</span>['password']==<span style="color: #800080;">$PassWord</span><span style="color: #000000;">)
            {
                </span><span style="color: #800080;">$this</span>->LoginSuccess = <span style="color: #0000ff;">true</span><span style="color: #000000;">;
            }
            </span><span style="color: #800080;">$result</span>-><span style="color: #000000;">close();
        }
        </span><span style="color: #0000ff;">elseif</span>((<span style="color: #800080;">$result</span> = <span style="color: #800080;">$this</span>->HookUp->query(<span style="color: #800080;">$sql</span>))===<span style="color: #0000ff;">false</span><span style="color: #000000;">)
        {
            </span><span style="color: #0000ff;">echo</span> "Failed".<span style="color: #800080;">$this</span>->HookUp-><span style="color: #000000;">error;
            </span><span style="color: #0000ff;">exit</span><span style="color: #000000;">();
        }
        </span><span style="color: #800080;">$this</span>->HookUp-><span style="color: #000000;">close();
        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">LoginSuccess)
        {
            </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">request();
        }
        </span><span style="color: #0000ff;">else</span><span style="color: #000000;">
        {
            </span><span style="color: #008080;">header</span>("Location:index.php"<span style="color: #000000;">);
        }
    }
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> register(<span style="color: #800080;">$UserNow</span>,<span style="color: #800080;">$PassNow</span><span style="color: #000000;">)
    {
        </span><span style="color: #800080;">$UserName</span> = <span style="color: #800080;">$UserNow</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$PassWord</span> = <span style="color: #008080;">md5</span>(<span style="color: #800080;">$PassNow</span><span style="color: #000000;">);
        </span><span style="color: #800080;">$this</span>->LoginSuccess = <span style="color: #0000ff;">false</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$this</span>->TableMaster  = "BAdmin"<span style="color: #000000;">;
        </span><span style="color: #800080;">$this</span>->HookUp        = UniversalConnect::<span style="color: #000000;">doConnect();
        
        </span><span style="color: #800080;">$sql</span> = "INSERT INTO <span style="color: #800080;">$this</span>->TableMaster VALUES('<span style="color: #800080;">$UserName</span>','<span style="color: #800080;">$PassWord</span>')"<span style="color: #000000;">;
        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$result</span> = <span style="color: #800080;">$this</span>->HookUp->query(<span style="color: #800080;">$sql</span><span style="color: #000000;">))
        {
            </span><span style="color: #800080;">$this</span>->LoginSuccess = <span style="color: #0000ff;">true</span><span style="color: #000000;">;
        }
        </span><span style="color: #0000ff;">elseif</span>((<span style="color: #800080;">$result</span> = <span style="color: #800080;">$this</span>->HookUp->query(<span style="color: #800080;">$sql</span>))===<span style="color: #0000ff;">false</span><span style="color: #000000;">)
        {
            </span><span style="color: #0000ff;">echo</span> "Failed".<span style="color: #800080;">$this</span>->HookUp-><span style="color: #000000;">error;
            </span><span style="color: #0000ff;">exit</span><span style="color: #000000;">();
            </span><span style="color: #008000;">//</span><span style="color: #008000;">header("Location:index.php");</span>
<span style="color: #000000;">        }
        </span><span style="color: #800080;">$this</span>->HookUp-><span style="color: #000000;">close();
        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">LoginSuccess)
        {
            </span><span style="color: #0000ff;">echo</span> "<script>alert('Success!');</script>"<span style="color: #000000;">;
        }
        </span><span style="color: #0000ff;">else</span><span style="color: #000000;">
        {
            </span><span style="color: #008080;">header</span>("Location:index.php"<span style="color: #000000;">);
        }
    }
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> request()
    {
        </span><span style="color: #800080;">$this</span>->realSubject = <span style="color: #0000ff;">new</span><span style="color: #000000;"> RealSubject();
        </span><span style="color: #800080;">$this</span>->realSubject-><span style="color: #000000;">request();
    }
}
</span>?>
로그인 후 복사

클라이언트가 보낸 정보를 수신하고 확인을 위해 프록시 클래스에 메시지를 보내는 클라이언트 클래스입니다.

<?<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;">文件名Client.php</span>
<span style="color: #0000ff;">include_once</span>('Proxy.php'<span style="color: #000000;">);
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Client
{
    </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$Proxy</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$UserName</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$PassWord</span><span style="color: #000000;">;
    
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> __construct()
    {
        </span><span style="color: #800080;">$this</span>->TableMaster = 'BAdmin'<span style="color: #000000;">;
        </span><span style="color: #800080;">$this</span>->HookUp      = UniversalConnect::<span style="color: #000000;">doConnect();
        </span><span style="color: #800080;">$this</span>->UserName    = <span style="color: #800080;">$this</span>->HookUp->real_escape_string(<span style="color: #008080;">trim</span>(<span style="color: #800080;">$_POST</span>['username'<span style="color: #000000;">]));
        </span><span style="color: #800080;">$this</span>->PassWord    = <span style="color: #800080;">$this</span>->HookUp->real_escape_string(<span style="color: #008080;">trim</span>(<span style="color: #800080;">$_POST</span>['password'<span style="color: #000000;">]));
        </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$_GET</span>['do']==='register'<span style="color: #000000;">)
        {
            </span><span style="color: #800080;">$this</span>->getRegis(<span style="color: #800080;">$this</span>->proxy=<span style="color: #0000ff;">new</span><span style="color: #000000;"> Proxy());
        }</span><span style="color: #0000ff;">elseif</span>(<span style="color: #800080;">$_GET</span>['do']==='login'<span style="color: #000000;">)
        {
            </span><span style="color: #800080;">$this</span>->getIface(<span style="color: #800080;">$this</span>->proxy=<span style="color: #0000ff;">new</span><span style="color: #000000;"> Proxy());
        }
    }
    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> getIface(ISubject <span style="color: #800080;">$proxy</span><span style="color: #000000;">)
    {
        </span><span style="color: #800080;">$proxy</span>->login(<span style="color: #800080;">$this</span>->UserName,<span style="color: #800080;">$this</span>-><span style="color: #000000;">PassWord);
    }
    </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> getRegis(ISubject <span style="color: #800080;">$proxy</span><span style="color: #000000;">)
    {
        </span><span style="color: #800080;">$proxy</span>->register(<span style="color: #800080;">$this</span>->UserName,<span style="color: #800080;">$this</span>-><span style="color: #000000;">PassWord);
    }
}
</span><span style="color: #800080;">$Worker</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Client();
</span>?>
로그인 후 복사

 실제 테마는 프록시 클래스로만 들어갈 수 있습니다.

<?<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;">文件名RealSubject.php</span>
<span style="color: #0000ff;">include_once</span>('ISubject.php'<span style="color: #000000;">);
</span><span style="color: #0000ff;">class</span> RealSubject <span style="color: #0000ff;">implements</span><span style="color: #000000;"> ISubject
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> request()
    {
        </span><span style="color: #008080;">session_save_path</span>(<span style="color: #008080;">dirname</span>(<span style="color: #ff00ff;">__FILE__</span>).'/sess/'<span style="color: #000000;">);
        @</span><span style="color: #008080;">session_start</span><span style="color: #000000;">();
        </span><span style="color: #800080;">$_SESSION</span>['bergift'] = 'admin'<span style="color: #000000;">;
        </span><span style="color: #008080;">header</span>("Location:main.php"<span style="color: #000000;">);
    }
}
</span>?>
로그인 후 복사

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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