class InterceptionHandler

이 라이브러리는 AOP(aspect-oriented programming)을 구현한 라이브러리이며 이 클래스는 프로그램 내에서 AOP를 관리하는 역할을 한다.

Properties

protected AdvisorCollection $advisorCollection
protected Loader $loader
protected Pass $passes
protected ProxyGenerator $proxyGenerator
protected array $proxyList proxy가 생성된 클래스 목록 key는 target class name, value는 proxy class name을 저장한다.

Methods

__construct(AdvisorCollection $advisorCollection, ProxyGenerator $generator)

constructor

addAdvisor(array|string $pointCut, array|string $advisorInfo, Closure $advice)

advisor의 구성정보를 파라메터로 입력받아 advisorCollection에 추가한다.

array
resolveAdvisorInfo(array $advisorInfo)

addAdvisor 메소드를 통해 입력받은 advisorInfo에서 정보를 추출한다.

string|array|null
resolveBeforeAdvisor(string|array $priority)

advisorInfo에서 before advisor name을 추출한다.

string|array|null
resolveAfterAdvisor(string|array $priority)

advisorInfo에서 after advisor name을 추출한다.

string
proxy(string $targetClass, string|null $alias = null)

타겟 클래스의 프록시 클래스를 생성하여 로드하고, 생성된 프록시 클래스 이름을 반환한다.

array
getProxyList()

생성된 proxy class 리스트를 반환한다.

void
clearProxies()

기생성된 Proxy 파일을 모두 삭제한다.

Details

at line 69
__construct(AdvisorCollection $advisorCollection, ProxyGenerator $generator)

constructor

Parameters

AdvisorCollection $advisorCollection advisor 저장소
ProxyGenerator $generator 프록시 생성기

at line 78
AdvisorCollection getAdvisorCollection()

Return Value

AdvisorCollection

at line 105
Advisor addAdvisor(array|string $pointCut, array|string $advisorInfo, Closure $advice)

advisor의 구성정보를 파라메터로 입력받아 advisorCollection에 추가한다.

이 함수를 직접 호출하는 대신 intercept() 헬퍼함수를 사용하십시오.

Parameters

array|string $pointCut advisor의 point cut을 지정한다. point cut은 [타겟클래스명]@[메소드명] 형태의 string 또는, string array 형식을 가진다. 예: 'Document@insertDocument' 또는 ['Document@insertDocument', 'Document@updateDocument']
array|string $advisorInfo advisor의 이름을 지정한다. 필요한 경우 before, after advisor의 이름을 지정하여 우선순위를 지정할 수 있다. 예: 'spamfilter.insertDocument' - advisor 이름으로 spamfilter.insertDocument를 지정 ['spamfilter.insertDocument' => 'mailing.insertDocument'] - before advisor로 mailing.insertDocument를 지정, mailing이 먼저 실행된 후, spamfilter가 실행된다.
Closure $advice advisor가 작동할 때 실행될 코드를 지정한다. Closure 형식으로 지정한다. 예: function($target, $arg1, $arg2, $arg3) { $target($arg1, $arg2, $arg3); }

Return Value

Advisor 추가된 advisor

at line 124
protected array resolveAdvisorInfo(array $advisorInfo)

addAdvisor 메소드를 통해 입력받은 advisorInfo에서 정보를 추출한다.

추출되는 정보는 advisor의 이름, advisor의 before, after 관계의 다른 advisor 목록이다.

Parameters

array $advisorInfo 정보를 추출할 배열

Return Value

array 추출된 정보

at line 153
private string|array|null resolveBeforeAdvisor(string|array $priority)

advisorInfo에서 before advisor name을 추출한다.

Parameters

string|array $priority advisorInfo의 priority 영역

Return Value

string|array|null before advisor name 목록

at line 180
private string|array|null resolveAfterAdvisor(string|array $priority)

advisorInfo에서 after advisor name을 추출한다.

Parameters

string|array $priority advisorInfo의 priority 영역

Return Value

string|array|null after advisor name 목록

at line 211
string proxy(string $targetClass, string|null $alias = null)

타겟 클래스의 프록시 클래스를 생성하여 로드하고, 생성된 프록시 클래스 이름을 반환한다.

만약 어떤 클래스에 interception을 적용하고 싶을 때 이 메소드를 사용하면 된다.

$targetClassName = 'My\Namespace\PostManager';
$proxyClass = XeInterception::proxy($targetClass, 'Post');

$postManager = new $proxyClass();

두번째 파라메터를 사용하여 타겟클래스의 alias 이름을 등록할 수 있다. alias 이름을 지정하면, 타겟 클래스에 interception을 등록할 때, alias 이름을 사용할 수 있다.

// Post alias를 사용
intercept('Post@insert', 'spam_filter', function(){...});

Parameters

string $targetClass 타겟 클래스
string|null $alias 타겟 클래스의 별칭

Return Value

string

at line 231
array getProxyList()

생성된 proxy class 리스트를 반환한다.

Return Value

array

at line 241
void clearProxies()

기생성된 Proxy 파일을 모두 삭제한다.

Return Value

void