declare

Оновлено: 11.05.2023

(PHP 4, PHP 5, PHP 7, PHP 8)

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

Секція директив дозволяє задати поведінку блоку declare. Наразі розпізнаються лише три директиви: директива ticks (див. нижче для отримання додаткової інформації про директиву ticks), директива encoding (див. нижче для отримання додаткової інформації про директиву encoding) та директива strict_types (див. розділ строгої типізації на сторінці оголошення типів)

Оскільки директиви обробляються під час компіляції файлу, значеннями директив можуть бути лише літерали. Змінні та константи використовувати не можна. Для ілюстрації:

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

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

Буде виконано операторну частину блоку 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
?>

Тик - це подія, яка відбувається для кожного з N низькорівневих операторів з тиком, що виконуються синтаксичним аналізатором у блоці declare. Значення N задається за допомогою ticks=N у секції директив блоку declare.

Не всі оператори можна позначати галочкою. Зазвичай, вираз умови та вираз аргументу не можна позначати галочкою.

Подія(и), які відбуваються на кожному тику, визначаються за допомогою функції 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
}

?>

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

Приклад #2 Оголошення кодування для скрипта.

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

У поєднанні з просторами імен єдиним допустимим синтаксисом для declare є declare(кодування='...'); де ... - значення кодування. declare(кодування='...') {} призведе до помилки при розборі у поєднанні з просторами імен.