1
0
mirror of https://github.com/php/doc-ru.git synced 2026-04-24 07:48:05 +02:00
Files
archived-doc-ru/language/control-structures/declare.xml
T

185 lines
7.0 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 28529d3539b850e870e3aa97570f4db0e53daa03 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="control-structures.declare" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>declare</title>
<?phpdoc print-version-for="declare"?>
<para>
Конструкция <literal>declare</literal> используется для установки
директив исполнения для блока кода. Синтаксис <literal>declare</literal>
аналогичен с синтаксисом других конструкций управления выполнением:
<informalexample>
<programlisting>
<![CDATA[
declare (directive)
statement
]]>
</programlisting>
</informalexample>
</para>
<para>
Секция <literal>directive</literal> позволяет установить поведение
блока <literal>declare</literal>.
В настоящее время распознаются только три директивы:
директива <literal>ticks</literal> (Дополнительная информация
о директиве <link linkend="control-structures.declare.ticks">ticks</link>
доступна ниже), директива <literal>encoding</literal> (Дополнительная информация
о директиве <link linkend="control-structures.declare.encoding">encoding</link>
доступна ниже) и директива <literal>strict_types</literal> (подробности в разделе про
<link linkend="language.types.declarations.strict">строгую типизацию</link> на странице аргументов функции)
</para>
<para>
Поскольку директивы обрабатываются при компиляции файла, то только символьные данные
могут использоваться как значения директивы. Нельзя использовать переменные и константы.
Пример:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Правильно:
declare(ticks=1);
// Недопустимо:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
Часть <literal>statement</literal> блока <literal>declare</literal>
будет выполнена — как выполняется и какие побочные эффекты
возникают во время выполнения, может зависеть от директивы, которая установлена в
блоке <literal>directive</literal>.
</para>
<para>
Конструкция <literal>declare</literal> также может быть использована
в глобальной области видимости, влияя на весь следующий за ней код
(однако, если файл с <literal>declare</literal> был включён, то она
не будет действовать на родительский файл).
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// это то же самое:
// можно так:
declare(ticks=1) {
// прочие действия
}
// или так:
declare(ticks=1);
// прочие действия
?>
]]>
</programlisting>
</informalexample>
</para>
<sect2 xml:id="control-structures.declare.ticks">
<title>Тики</title>
<para>Тик - это событие, которое случается каждые
<varname>N</varname> низкоуровневых операций, выполненных
парсером внутри блока <literal>declare</literal>.
Значение <varname>N</varname> задаётся, используя
<code>ticks=<varname>N</varname></code> внутри
секции <literal>directive</literal> блока <literal>declare</literal>.
</para>
<para>
Не все выражения подсчитываются. Обычно, условные выражения
и выражения аргументов не подсчитываются.
</para>
<para>
Событие (или несколько событий), которое возникает на каждом тике
определяется, используя <function>register_tick_function</function>.
Смотрите пример ниже для дополнительной информации. Имейте в виду,
что для одного тика может возникать несколько событий.
</para>
<para>
<example>
<title>Пример использования тика</title>
<programlisting role="php">
<![CDATA[
<?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; // вызывает событие тика
}
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Смотрите также <function>register_tick_function</function> и
<function>unregister_tick_function</function>.
</simpara>
</sect2>
<sect2 xml:id="control-structures.declare.encoding">
<title>Кодировка</title>
<para>
Кодировка скрипта может быть указана для каждого скрипта, используя директиву <literal>encoding</literal>.
<example>
<title>Определение кодировки для скрипта.</title>
<programlisting role="php">
<![CDATA[
<?php
declare(encoding='ISO-8859-1');
// прочий код
?>
]]>
</programlisting>
</example>
</para>
<caution>
<simpara>
В сочетании с пространством имён единственно допустимый синтаксис
для declare является <literal>declare(encoding='...');</literal> где
<literal>...</literal> это значение кодировки. <literal>declare(encoding='...') {}</literal>
приведёт к ошибке парсера, если используется вместе с пространством имён.
</simpara>
</caution>
<para>
Смотрите также <link linkend="ini.zend.script-encoding">zend.script_encoding</link>.
</para>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->