(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.