>  기사  >  php教程  >  PHP 및 MySQL 디자인 패턴: 프록시 패턴

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

WBOY
WBOY원래의
2016-09-20 03:30:251346검색

 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으로 문의하세요.