Контролни структури
PHP Manual

declare

Конструкцията declare се използва за установяване на изпълними директиви за блокове от код. Синтаксисът на declare е подобен на този на другите конструкции за управление на потока:

declare (directive)
    statement

Разделът directive позволява да се установява поведението на declare блок. Към момента се разпознават само две директиви: директивата ticks (вж. по-долу за повече информация относно директивата ticks) и директивата encoding (вж. по-долу за повече информация относно директивата encoding).

Забележка: Директивата encoding (кодировка) беше добавена в PHP 5.3.0

Частта statement от блока declare ще бъде изпълнена - как ще се изпълни и какви странични ефекти ще настъпят по време на изпълнението може да зависи от директивата указана в блока directive.

Конструкцията declare може също да се използва и в глобален обхват, като по този начин ще се отрази на целия код, който я следва (ако файлът с declare е бил включен (included), обаче, тя не повлиява родителския файл).

<?php
// тези са равносилни:

// можете да използвате това:
declare(ticks=1) {
  
// целия скрипт тук
}

// или да използвате това:
declare(ticks=1);
// целия скрипт тук
?>

Туптене

Внимание

Туптенето е непрепоръчително от PHP 5.3.0 и ще бъде премахнато в PHP 6.0.0.

Тупване (tick) е събитие, което се случва на всеки N инструкции от ниско ниво, изпълнени от синтактичния анализатор в declare блок. Стойността на N се задава посредством ticks=N в рамките на directive на блока declare.

Събитията, които се случват на всяко тупване, се задават посредством register_tick_function(). За повече подробности, вж. примера по-долу. Забележете, че за едно тупване, могат да настъпят повече от едно събития.

Example #1 Профил на част от PHP код

<?php
// Функция, която записва времето, когато е извикана
function profile($dump FALSE)
{
    static 
$profile;

    
// Връща времената, записани в профила и ги изтрива
    
if ($dump) {
        
$temp $profile;
        unset (
$profile);
        return 
$temp;
    }

    
$profile[] = microtime ();
}

// Установяване на обработчик на туптене
register_tick_function("profile");

// Инициализиране на функцията преди деклариращия блок
profile();

// Пускане на блок от код, хвърляне на тупване на всеки втори израз
declare(ticks=2) {
    for (
$x 1$x 50; ++$x) {
        echo 
similar_text(md5($x), md5($x*$x)), "<br />;";
    }
}

// Показване на данните, записани в профила
print_r(profile (TRUE));
?>

Примерът профилира PHP кода вътре в 'declare' блок, записвайки времето, в което всяка втора инструкция от ниско ниво в блока се изпълнява. След това, тази информация би могла да бъде използвана за откриване на бавни части в дадени откъси код. Тази операция може да бъде изпълнена и посредством други методи, но чрез използване на туптене е най-подходящо и лесно за осъществяване.

Туптенето е подходящо за откриване на грешки, осъществяване на проста многозадачност, фонов вход/изход и други.

Вж. също register_tick_function() и unregister_tick_function().

Кодировка

Кодировката на всеки скрипт може да бъде специфицирана посредством директивата encoding.

Example #2 Деклариране на кодировка за скрипта.

<?php
declare(encoding='ISO-8859-1');
// някакъв код тук
?>

Внимание

В комбинация с пространства от имена, единственият валиден синтаксис за declare е declare(encoding='...');, където ... е кодировъчната стойност. declare(encoding='...') {} ще доведе до синтактична грешка, когато се комбинира с пространства от имена.

Кодировъчната тойност, указана от declare, се пренебрегва в PHP 5.3, освен ако PHP не е компилиран с --enable-zend-multibyte. В PHP 6.0 директивата encoding ще бъде използвана за уведомяване на синтактичния анализатор с каква кодировка е бил създаден файла. Правилните стойности са имената на кодировки, като UTF-8.


Контролни структури
PHP Manual