declare

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

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

declare (directive)
    statement

Секция directive позволяет установить поведение блока declare. В настоящее время распознаются только три директивы: директива ticks (Дополнительная информация о директиве ticks доступна ниже), директива encoding (Дополнительная информация о директиве encoding доступна ниже) и директива strict_types (подробности в разделе про строгую типизацию на странице аргументов функции)

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

<?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; // вызывает событие тика
}

?>

Смотрите также register_tick_function() и unregister_tick_function().

Кодировка

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

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

<?php
declare(encoding='ISO-8859-1');
// прочий код
?>

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

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

Смотрите также zend.script_encoding.