declare
(PHP 4, PHP 5, PHP 7, PHP 8)
Конструкция declare
устанавливает
директивы выполнения для блока кода. Синтаксис конструкции declare
аналогичен синтаксису других конструкций управления потоком:
Часть directive
разрешает установить поведение
блока declare
.
Пока PHP распознаёт только три директивы:
Поскольку директивы обрабатываются при компиляции файла, только литералы
разрешается указывать как значения директив. Нельзя указывать переменные и константы.
Пример:
PHP выполнит часть statement
блока declare
—
как PHP выполнит инструкции и какие побочные эффекты
возникают во время выполнения, зависит от директивы, которую установили
в блоке directive
.
Конструкцию declare
разрешается объявлять
в глобальной области видимости, чтобы повлиять на весь код за ней
(однако, если файл с объявлением конструкции 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.