declare


(PHP 4, PHP 5)

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

 declare (directive)     statement 

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

Замечание: Директива encoding была добавлена в PHP 5.3.0

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

<?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.