declare
PHP Manual
PHP Manual»Управляющие конструкции»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.

To Top