update : 2015.11.03
php.shukuma.com

검색:
 
 
declare

declare

declare구문은 코드 블록의 수행 지시어를 활성화하기 위해 사용된다. declare문법은 다른 흐름 제어 구조의 문법과 비슷하다:

declare (directive) statement

directive 부분은 declare 블록의 동작을 활성화합니다. 현재는 두 지시어만 인식합니다: ticks 지시어(자세한 정보는 아래 ticks 지시어 참고)와 encoding 지시어(자세한 정보는 아래 encoding 지시어 참고).

Note: encoding 지시어는 PHP 5.3.0에서 추가되었습니다.

declare블록의 statement부분이 수행될것이다 - 어떻게 수행이 되고 수행중에 어떤 사이드 이펙트가 발생할지는 directive블록의 디렉티브에 달려있다.

declare 구문은 전역 유효영역 안에서 사용할수 있다. 그래서 모든 코드가 그 디렉티브에 영향을 받는다. (그러나 declare가 있는 파일을 포함하였을 때에는 원 파일에는 영향을 주지 않습니다)

<?php
// 이들은 동일합니다:

// 이를 사용할 수 있습니다:
declare(ticks=1) {
    
// 여기에 전체 스크립트
}

// 또는 이렇게 사용할 수 있습니다:
declare(ticks=1);
// 여기에 전체 스크립트
?>

틱(Ticks)

Caution

PHP 5.3.0부터 틱은 배제되었고, PHP 6.0.0에서 제거될 예정입니다.

틱은 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));
?>
위 예제 코드는 실행 블록안의 두번째 저레벨(low-level) 구문의 시간에 따라 'declare'블록 안의 PHP코드를 분석한다. 이런 정보로 어느 코드 부분에서 느려지는지 알아볼 수 있다. 이런 처리방법은 다른 기법으로 수행할수있다: 틱을 이용하는 것은 좀더 편하고 좀더 구현하기 쉽다.

틱은 디버깅, 단순한 멀티태스킹 구현, 백그라운드 I/O와 다른 많은 작업 에 적합하게 이용할수 있다.

register_tick_function()함수와 unregister_tick_function()함수를 참고하세요.

인코딩

encoding 지시어를 사용하여 스크립트 별로 지정할 수 있는 인코딩입니다.

Example #2 스크립트의 인코딩 선언하기

<?php
declare(encoding='ISO-8859-1');
// code here

Caution

이름공간과 결합할 때, declare의 적합한 문법은 declare(encoding='...'); 뿐입니다. (...은 인코딩 값) 이름공간과 결합했을 때, declare(encoding='...') {}은 해석 오류를 발생합니다.

PHP 5.3에서는 PHP가 --enable-zend-multibyte로 컴파일 되지 않았을 경우, encoding 선언 값이 무시됩니다. PHP 6.0에서는, encoding 지시어가 파일이 생성된 인코딩을 스캐너에게 알려줍니다. 적절한 값은 UTF-8 등의 인코딩 이름입니다.