1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files

185 lines
6.9 KiB
XML
Raw Permalink 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: 5499acf9df7e1338d540bde207acc859792cd139 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>.
PHP пока распознаёт только три директивы:
<simplelist>
<member><link linkend="control-structures.declare.ticks"><literal>ticks</literal></link></member>
<member><link linkend="control-structures.declare.encoding"><literal>encoding</literal></link></member>
<member><link linkend="language.types.declarations.strict"><literal>strict_types</literal></link></member>
</simplelist>
</para>
<para>
Директивы поддерживают только литеральные значения,
покольку обрабатываются при компиляции файла.
Нельзя указывать переменные и константы.
Пример:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Правильно:
declare(ticks=1);
// Недопустимо:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
]]>
</programlisting>
</informalexample>
</para>
<para>
PHP выполнит часть <literal>statement</literal> блока <literal>declare</literal>
как PHP выполнит инструкции и какие побочные эффекты
возникают во время выполнения, зависит от директивы, которую установили
в блоке <literal>directive</literal>.
</para>
<para>
Конструкцию <literal>declare</literal> разрешается объявлять
в глобальной области видимости, чтобы повлиять на весь код за ней
(однако, если файл с объявлением конструкции <literal>declare</literal> включили
в родительский файл, конструкция не повлияет на родительский файл).
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Это то же самое:
// Конструкцию declare объявляют вот так:
declare(ticks=1) {
// Скрипт записывается внутри блока с фигурными скобками
}
// или так:
declare(ticks=1);
// Скрипт записывается после объявления конструкции declare
]]>
</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);
// Функция, которую PHP будет вызывать при каждом тике
function tick_handler()
{
echo "PHP вызвал функцию 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
-->