(PHP 4, PHP 5, PHP 7)
Конструкция declare используется для установки директив исполнения для блока кода. Синтаксис declare схож с синтаксисом других конструкций управления исполнением:
declare (directive) statement
Секция directive позволяет установить поведение блока declare. В настоящее время распознаются только три директивы: директива ticks (Дополнительная информация о директиве ticks доступна ниже), директива encoding (Дополнительная информация о директиве encoding доступна ниже) и директива strict_types (подробности тут strict)
Версия | Описание |
---|---|
5.3.0 | Добавлена директива encoding |
7.0.0 | Добавлена директива 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); } ?>
Пример #2 Пример использования тиков
<?php function tick_handler() { echo "tick_handler() called\n"; } $a = 1; tick_handler(); if ($a > 0) { $a += 2; tick_handler(); print($a); tick_handler(); } tick_handler(); ?>
См. также register_tick_function() и unregister_tick_function().
Кодировка
Кодировка скрипта может быть указана для каждого скрипта используя директиву encoding.
Пример #3 Определение кодировки для скрипта.
<?php declare(encoding='ISO-8859-1'); // прочий код ?>
Скомбинированный с пространством имен, единственно допустимый синтаксис для declare является declare(encoding=’…’); где … это значение кодировки. declare(encoding=’…’) {} приведет к ошибке парсера, если используется вместе с пространством имен.
Значение кодировки в declare игнорируется в PHP 5.3, если php не скомпилирован с —enable-zend-multibyte.
Имейте в виду, что PHP не может показать был ли он скомпилирован с —enable-zend-multibyte иначе как с помощью phpinfo().
Смотрите также zend.script_encoding.