declare
declare구문은 코드 블록의 수행 디렉티브(directive)를 활성화하기 위해 사용된다. declare문법은 다른 흐름 제어 구조의 문법과 비슷하다:
declare (directive) statement
directive부분은 declare블록의 동작이 활성화되도록 해준다. 현재는 오직 한 디렉티브만 인식된다: ticks 디렉티브. (더 자세한 정보는 ticks 디렉티브를 볼것)
declare블록의 statement부분이 수행될것이다 - 어떻게 수행이 되고 수행중에 어떤 사이드 이펙트가 발생할지는 directive블록의 디렉티브에 달려있다.
declare 구문은 전역 유효영역 안에서 사용할수 있다. 그래서 모든 코드가 그 디렉티브에 영향을 받는다.
<?php
// 이들은 동일합니다:
// 이를 사용할 수 있습니다:
declare(ticks=1) {
// 여기에 전체 스크립트
}
// 또는 이렇게 사용할 수 있습니다:
declare(ticks=1);
// 여기에 전체 스크립트
?>
틱(Ticks)
틱은 declare블록에서 파서에 의해 수행되는
N 저레벨(low-level) 구문마다 발생하는
이벤트이다. N 값은
declare블록의 directive부분에서
ticks=N
으로 지정할수 있다.
각 틱에서 발생하는 이벤트(들)은 register_tick_function()함수 를 써서 지정한다. 자세한 것은 아래 예제를 볼것. 각 틱에서는 하나 이상의 이벤트가 발생할수 있음에 주의해야 한다.
Example#1 PHP 각 코드 섹션의 분석표만들기(Profile)
<?php
// 호출될대의 시간을 기록하는 함수
function profile($dump = FALSE)
{
static $profile;
// Profile에 저장된 모든 시간 리턴하고, 삭제함
if ($dump) {
$temp = $profile;
unset($profile);
return $temp;
}
$profile[] = microtime();
}
// 틱 핸들러 설정
register_tick_function("profile");
// declare 블록 전에 함수를 초기화
profile();
// 코드 블록의 실행하고, 두번째 구문에 틱을 부여함
declare(ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text(md5($x), md5($x*$x)), "<br />;";
}
}
// 분석표에 저장된 데이터를 출력
print_r(profile(TRUE));
?>
틱은 디버깅, 단순한 멀티태스킹 구현, 백그라운드 I/O와 다른 많은 작업 에 적합하게 이용할수 있다.
register_tick_function()함수와 unregister_tick_function()함수를 참고하세요.