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

declare (directive)
    statement

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

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

<?php
// This is valid:
declare(ticks=1);

// This is invalid:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>

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

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

<?php
// these are the same:

// you can use this:
declare(ticks=1) {
    // entire script here
}

// or you can use this:
declare(ticks=1);
// entire script here
?>

Ticks

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

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

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

 

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

<?php

declare(ticks=1);

// A function called on each tick event
function tick_handler()
{
    echo "tick_handler() called\n";
}

register_tick_function('tick_handler'); // causes a tick event

$a = 1; // causes a tick event

if ($a > 0) {
    $a += 2; // causes a tick event
    print($a); // causes a tick event
}

?>

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

Кодирование

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

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

<?php
declare(encoding='ISO-8859-1');
// code here
?>

Осторожность

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