Конструкцията 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.