declare

(PHP 4, PHP 5, PHP 7, PHP 8)

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

declare (directive)
    statement

Часть directive разрешает установить поведение блока declare. Пока PHP распознаёт только три директивы:

Поскольку директивы обрабатываются при компиляции файла, только литералы разрешается указывать как значения директив. Нельзя указывать переменные и константы. Пример:

<?php

// Правильно:
declare(ticks=1);

// Недопустимо:
const TICK_VALUE = 1;
declare(
ticks=TICK_VALUE);

?>

PHP выполнит часть statement блока declare — как PHP выполнит инструкции и какие побочные эффекты возникают во время выполнения, зависит от директивы, которую установили в блоке directive.

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

<?php

// Это то же самое:

// Конструкцию declare объявляют вот так:
declare(ticks=1) {
// Скрипт записывается внутри блока с фигурными скобками
}

// или так:
declare(ticks=1);
// Скрипт записывается после объявления конструкции declare

?>

Тики

Тик — событие, которое возникает каждые N низкоуровневых инструкций, которые парсер отмечает как такт и выполняет внутри блока declare. Значение N указывают как ticks=N внутри части directive блока declare.

Парсер отмечает как такт не каждую инструкцию. Обычно условные выражения и выражения аргументов не подсчитываются.

События, которые возникают на каждом тике, помогает определить функция register_tick_function(). Подробности содержит следующий пример. Обратите внимание, что для каждого тика иногда возникает больше одного события.

Пример #1 Пример использования тика

<?php

declare(ticks=1);

// Функция, которую PHP будет вызывать при каждом тике
function tick_handler()
{
echo
"PHP вызвал функцию tick_handler()\n";
}

register_tick_function('tick_handler'); // Вызывает событие тика

$a = 1; // Вызывает событие тика

if ($a > 0) {
$a += 2; // Вызывает событие тика
print $a; // Вызывает событие тика
}

?>

Смотрите также описание функций register_tick_function() и unregister_tick_function().

Кодировка

Директива encoding умеет указывать кодировку скрипта для каждого отдельного скрипта.

Пример #2 Объявление кодировки скрипта

<?php

declare(encoding='ISO-8859-1');
// В этом месте идёт код

?>

Предостережение

Единственный допустимый синтаксис для конструкции declare в сочетании с пространствами имён выглядит вот так: declare(encoding='...'); где ... — значение кодировки. В сочетании с пространствами имён запись declare(encoding='...') {} вызовет ошибку парсера.

Смотрите также описание директивы zend.script_encoding.