(PHP 4, PHP 5, PHP 7)
Конструкция declare используется для установки директив исполнения для блока кода. Синтаксис declare аналогичен с синтаксисом других конструкций управления выполнением:
declare (directive) statement
Секция directive позволяет установить поведение блока declare. В настоящее время распознаются только три директивы: директива ticks (Дополнительная информация о директиве ticks доступна ниже), директива encoding (Дополнительная информация о директиве encoding доступна ниже) и директива strict_types (подробности в разделе про strict на странице аргументов функции)
Версия | Описание |
---|---|
7.0.0 | Добавлена директива strict_types |
7.0.0 | Директива ticks больше не проникает в разные блоки компиляции. |
5.3.0 | Добавлена директива encoding |
Поскольку директивы обрабатываются при компиляции файла, то только символьные данные могут использоваться как значения директивы. Нельзя использовать переменные и константы. Пример:
<?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()\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.