declare
Вернуться к: Управляющие конструкции
(PHP 4, PHP 5, PHP 7)
Конструкция declare используется для установки директив исполнения для блока кода. Синтаксис declare схож с синтаксисом других конструкций управления исполнением:
declare (directive) statement
Секция directive позволяет установить поведение блока declare. В настоящее время распознаются только две директивы: директива ticks (Дополнительная информация о директиве ticks доступна ниже) и директива encoding (Дополнительная информация о директиве encoding доступна ниже).
Замечание: Директива encoding была добавлена в PHP 5.3.0
Так как директива обрабатывается при компиляции файла, то только символьные данные могут использоваться как значения директивы. Нельзя использовать переменные и константы. Пример:
<?php
// Правильно:
declare(ticks=1);
// Недопустимо:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
Часть statement блока declare будет исполнена - как исполняется и какие сторониие эффекты возникают в процессе исполнения может зависеть от набора директив в блоке directive.
Конструкция declare может так же быть использована в глобальной области видимости, влияя на весь следующий за ней код (однако если файл с declare был включен, тогда он не имеет воздействия на родительский файл).
<?php
// выполняется одинаково:
// можно так:
declare(ticks=1) {
// прочие действия
}
// или так:
declare(ticks=1);
// прочие действия
?>
Тики
Тик - это событие, которое случается каждые
N низкоуровневых операций, выполненных
парсером внутри блока declare.
Значение N задается, используя
ticks=N
внутри
секции directive блока declare.
Не все выражения подсчитываются. Обычно, условные выражения и выражения аргументов не подсчитываются.
Событие (или несколько событий), которое возникает на каждом тике определяется, используя register_tick_function(). Смотрите пример ниже для дополнительной информации. Имейте в виду, что для одного тика может возникать несколько событий.
Пример #1 Пример использования тика
<?php
declare(ticks=1);
// Функция, исполняемая при каждом тике
function tick_handler()
{
echo "tick_handler() выполнено\n";
}
register_tick_function('tick_handler');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
?>
Пример #2 Пример использования тиков
<?php
function tick_handler()
{
echo "tick_handler() called\n";
}
$a = 1;
tick_handler();
if ($a > 0) {
$a += 2;
tick_handler();
print($a);
tick_handler();
}
tick_handler();
?>
См. также register_tick_function() и unregister_tick_function().
Кодировка
Кодировка скрипта может быть указана для каждого скрипта используя директиву encoding.
Пример #3 Определение кодировки для скрипта.
<?php
declare(encoding='ISO-8859-1');
// прочий код
?>
Скомбинированный с пространством имен, единственно допустимый синтаксис для declare является declare(encoding='...'); где ... это значение кодировки. declare(encoding='...') {} приведет к ошибке парсера, если используется вместе с пространством имен.
Значение кодировки в declare игнорируется в PHP 5.3 если php не скомпилирован с --enable-zend-multibyte.
Имейте в виду, что PHP не может показать был ли он скомпилирован с --enable-zend-multibyte иначе как с помощью phpinfo().
Смотрите также zend.script_encoding.
Вернуться к: Управляющие конструкции