declare
(PHP 4, PHP 5, PHP 7, PHP 8)
Конструкция declare
используется для установки
директив исполнения для блока кода. Синтаксис declare
аналогичен с синтаксисом других конструкций управления выполнением:
declare (directive) statement
Секция directive
позволяет установить поведение
блока declare
.
В настоящее время распознаются только три директивы:
директива ticks
(Дополнительная информация
о директиве ticks
доступна ниже), директива encoding
(Дополнительная информация
о директиве encoding
доступна ниже) и директива strict_types
(подробности в разделе про
strict на странице аргументов функции)
Поскольку директивы обрабатываются при компиляции файла, то только символьные данные могут использоваться как значения директивы. Нельзя использовать переменные и константы. Пример:
<?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()\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='...') {}
приведет к ошибке парсера, если используется вместе с пространством имен.
Смотрите также zend.script_encoding.