> 백엔드 개발 > PHP 튜토리얼 > 0x0000008e 컴퓨터 블루 스크린 코드 PHP에서 가상 프록시를 통해 지연된 로딩을 위한 구현 코드

0x0000008e 컴퓨터 블루 스크린 코드 PHP에서 가상 프록시를 통해 지연된 로딩을 위한 구현 코드

WBOY
풀어 주다: 2016-07-29 08:45:37
원래의
1555명이 탐색했습니다.

이는 Martin의 "Enterprise Application Architecture Patterns"에서 배운 내용이며, PHP의 동적 언어의 특성을 보조하고 Java보다 훨씬 쉽게 지연 로딩(LazyLoad)을 구현할 수 있습니다. 기본 원칙은 가상 프록시(가상 프록시)를 자리 표시자로 사용하는 것입니다. 프록시 개체의 멤버(메서드 또는 특성)에 액세스하면 로딩이 트리거됩니다.
그러나 제가 구현한 버전에는 다음과 같은 제한 사항이 있습니다.
객체에만 적용할 수 있으며 배열과 같은 기본 데이터 유형을 프록시할 수 없습니다(ArrayObject와 같은 내장 객체로 캡슐화해야 함).
설치 후 프록시를 사용하면 ArrayAccess의 인덱서 및 Itreator의 반복자와 같이 오버로드된 속성이 있는 일부 작업 인터페이스 구현이 유효하지 않게 됩니다. 이 프록시를 사용하여 컬렉션 유형의 지연 로드를 처리하는 경우 특수 처리를 위해 하위 클래스도 상속해야 합니다. foreach
demo

코드 복사를 사용하여 외부에서 반복할 수 있습니다. 코드는 다음과 같습니다.


// 테스트
$v = new VirtualProxy(function(){
echo 'Now, Loading', "n";
$a = new ArrayObject(range(1,100));
$a->abc = 'a';// 실제 사용, 여기서 호출되는 것은 DataMapper의 findXXX 메소드입니다
// 반환되는 것은 도메인 객체 컬렉션입니다
return $a; 🎜>// 프록시 객체를 원본 객체로 직접 접근
// 이때 생성자가 전달한 콜백 함수가 호출됩니다
// 객체 로딩 지연을 달성하기 위해
echo $v->abc . $v->offsetGet(50);


가상 프록시



코드 복사

/**

* 가상 프록시, 멤버에 접근할 때만 대상 객체를 생성하는 클로저 함수가 호출됩니다.

*
* @author tonyseek
*
*/
class VirtualProxy
{
private $holder = null
private $loader = null; >/**
* 가상 프록시, 멤버에 접근할 때만 대상 객체를 생성하는 클로저 함수가 호출됩니다.
*
* @param Closure $loader는 프록시 객체의 클로저 기능을 생성합니다
*/
공용 함수 __construct(Closure $loader)
{
$this->loader = $loader
}
/**
* 프록시 멤버 메서드 호출
*
* @param string $method
* @param array $arguments
* @throws BadMethodCallException
* @return 혼합
*/
공용 함수 __call($method, array $arguments = null)
{
$this->check()
if (!method_exists($this->holder, $ method)) {
throw new BadMethodCallException();
return call_user_func_array (
array(&$this->holder, $method),
$arguments); }
/**
* 프록시 멤버 속성 읽기
*
* @param string $property
* @throws ErrorException
* @return 혼합
*/
공용 함수 __get($property)
{
$this->check()
if (!isset($this->) ;holder->$property)) {
throw new ErrorException();
}
return $this->holder->$property;
/**
* 프록시 구성원 속성 할당
*
* @param string $property
* @param 혼합 $value
*/
공용 함수 __set($property, $value)
{
$this->check()
$this->holder->$property = $value ;
}
/**
* 프록시 객체가 이미 존재하는지 확인하고, 존재하지 않으면 생성합니다.
*/
비공개 함수 확인()
{
if (null == $this->holder) {
$loader = $this->loader;
$this->holder = $loader()
}
}
}


위 내용은 0x0000008e 컴퓨터 블루 스크린 코드의 내용을 포함하여 가상 프록시를 통해 지연된 로딩을 구현하기 위해 PHP에서 0x0000008e 컴퓨터 블루 스크린 코드의 구현 코드를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿