svn: /phpdoc/bg/trunk/language/control-structures/ declare.xml goto.xml
[email protected] (Stanislav Yordanov) Wed, 13 Apr 2016 23:16:01 +0000
| Newsgroups | php.doc.bg |
|---|---|
| Message-ID | <[email protected]> |
stanprog Wed, 13 Apr 2016 23:16:01 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=339002
Log:
sync with EN
Changed paths:
U phpdoc/bg/trunk/language/control-structures/declare.xml
U phpdoc/bg/trunk/language/control-structures/goto.xml
svn-diffs-339002.txt
(text/x-diff, 15.8 KB)
Modified: phpdoc/bg/trunk/language/control-structures/declare.xml
===================================================================
--- phpdoc/bg/trunk/language/control-structures/declare.xml 2016-04-13 10:27:26 UTC (rev 339001)
+++ phpdoc/bg/trunk/language/control-structures/declare.xml 2016-04-13 23:16:01 UTC (rev 339002)
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: n/a Maintainer: kouber Status: ready -->
-
+<!-- EN-Revision: 338957 Maintainer: stanprog Status: ready -->
+<!-- CREDITS: kouber -->
<sect1 xml:id="control-structures.declare" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title><literal>declare</literal></title>
+ <?phpdoc print-version-for="declare"?>
<para>
Конструкцията <literal>declare</literal> се използва за
установяване на изпълними директиви за блокове от код.
@@ -18,24 +19,65 @@
</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.ticks">ticks</link>),
+ директивата <literal>encoding</literal>
(вж. по-долу за повече информация относно директивата
- <link linkend="control-structures.declare.encoding">encoding</link>).
+ <link linkend="control-structures.declare.encoding">encoding</link>)
+ и директивата <literal>strict_types</literal>
+ (вж. за повече информация раздел
+ <link linkend="functions.arguments.type-declaration.strict">strict</link>)
+ от страницата за аргументите на функцията.
</para>
- <note>
- <simpara>
- Директивата encoding (кодировка) беше добавена в PHP 5.3.0
- </simpara>
- </note>
<para>
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>&Version;</entry>
+ <entry>&Description;</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>Добавена е директива <literal>encoding</literal></entry>
+ </row>
+ <row>
+ <entry>7.0.0</entry>
+ <entry>Добавена е директива <literal>strict_types</literal></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </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>
ще бъде изпълнена - как ще се изпълни и какви странични ефекти
@@ -55,102 +97,106 @@
// можете да използвате това:
declare(ticks=1) {
- // целия скрипт тук
+ // целият скрипт тук
}
// или да използвате това:
declare(ticks=1);
-// целия скрипт тук
+// целият скрипт тук
?>
]]>
</programlisting>
</informalexample>
</para>
+
<sect2 xml:id="control-structures.declare.ticks">
<title>Туптене</title>
- <caution>
- <simpara>
- Туптенето е непрепоръчително от PHP 5.3.0 и ще бъде премахнато
- в PHP 6.0.0.
- </simpara>
- </caution>
- <para>Тупване (tick) е събитие, което се случва
- на всеки <varname>N</varname> инструкции от ниско ниво,
- изпълнени от синтактичния анализатор в <literal>declare</literal> блок.
- Стойността на <varname>N</varname> се задава посредством
- <code>ticks=<varname>N</varname></code>
- в рамките на <literal>directive</literal> на блока
- <literal>declare</literal>.
- </para>
- <para>
- Събитията, които се случват на всяко тупване, се задават посредством
- <function>register_tick_function</function>. За повече подробности,
- вж. примера по-долу. Забележете, че за едно тупване, могат да настъпят повече
- от едно събития.
- </para>
- <para>
- <example>
- <title>Профил на част от PHP код</title>
- <programlisting role="php">
+ <para>Тупване (tick) е събитие, което се случва на всеки
+ <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
-// Функция, която записва времето, когато е извикана
-function profile($dump = FALSE)
+
+declare(ticks=1);
+
+// Функцията се извиква при всяко събитие за тупване
+function tick_handler()
{
- static $profile;
+ echo "tick_handler() е извикан\n";
+}
- // Връща времената, записани в профила и ги изтрива
- if ($dump) {
- $temp = $profile;
- unset ($profile);
- return $temp;
- }
+register_tick_function('tick_handler');
- $profile[] = microtime ();
+$a = 1;
+
+if ($a > 0) {
+ $a += 2;
+ print($a);
}
-// Установяване на обработчик на туптене
-register_tick_function("profile");
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title>Пример за употреба на тупване</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
-// Инициализиране на функцията преди деклариращия блок
-profile();
+function tick_handler()
+{
+ echo "tick_handler() е извикан\n";
+}
-// Пускане на блок от код, хвърляне на тупване на всеки втори израз
-declare(ticks=2) {
- for ($x = 1; $x < 50; ++$x) {
- echo similar_text(md5($x), md5($x*$x)), "<br />;";
- }
+$a = 1;
+tick_handler();
+
+if ($a > 0) {
+ $a += 2;
+ tick_handler();
+ print($a);
+ tick_handler();
}
+tick_handler();
-// Показване на данните, записани в профила
-print_r(profile (TRUE));
?>
]]>
- </programlisting>
- </example>
- Примерът профилира PHP кода вътре в 'declare'
- блок, записвайки времето, в което всяка втора инструкция от
- ниско ниво в блока се изпълнява. След това, тази информация би
- могла да бъде използвана за откриване на бавни
- части в дадени откъси код. Тази операция може да бъде
- изпълнена и посредством други методи, но чрез използване на туптене е най-подходящо
- и лесно за осъществяване.
- </para>
- <simpara>
- Туптенето е подходящо за откриване на грешки, осъществяване на проста
- многозадачност, фонов вход/изход и други.
- </simpara>
- <simpara>
- Вж. също <function>register_tick_function</function> и
- <function>unregister_tick_function</function>.
- </simpara>
+ </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>
- Кодировката на всеки скрипт може да бъде специфицирана посредством директивата encoding.
- <example>
- <title>Деклариране на кодировка за скрипта.</title>
+ Кодировката на всеки скрипт може да бъде специфицирана посредством директивата encoding.
+ <example>
+ <title>Деклариране на кодировка за скрипта.</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -161,7 +207,7 @@
</programlisting>
</example>
</para>
-
+
<caution>
<simpara>
В комбинация с пространства от имена, единственият валиден синтаксис за declare
@@ -171,11 +217,16 @@
</simpara>
</caution>
<para>
- Кодировъчната тойност, указана от declare, се пренебрегва в PHP 5.3, освен ако PHP не е компилиран
- с <literal>--enable-zend-multibyte</literal>. В PHP 6.0 директивата <literal>encoding</literal>
- ще бъде използвана за уведомяване на синтактичния анализатор с каква кодировка е бил създаден файла.
- Правилните стойности са имената на кодировки, като <literal>UTF-8</literal>.
+ Кодировъчната стойност, указана от declare, се пренебрегва в PHP 5.3, освен ако PHP не е компилиран
+ с <literal>--enable-zend-multibyte</literal>.
</para>
+ <para>
+ Имайте предвид, че PHP не може да покаже да ли е компилиран с настройката
+ <literal>--enable-zend-multibyte</literal>, като това може да се разбере единствено с <function>phpinfo</function>.
+ </para>
+ <para>
+ Вж. също <link linkend="ini.zend.script-encoding">zend.script_encoding</link>.
+ </para>
</sect2>
</sect1>
Modified: phpdoc/bg/trunk/language/control-structures/goto.xml
===================================================================
--- phpdoc/bg/trunk/language/control-structures/goto.xml 2016-04-13 10:27:26 UTC (rev 339001)
+++ phpdoc/bg/trunk/language/control-structures/goto.xml 2016-04-13 23:16:01 UTC (rev 339002)
@@ -1,13 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: n/a Maintainer: kouber Status: ready -->
-
+<!-- EN-Revision: 332237 Maintainer: stanprog Status: ready -->
+<!-- CREDITS: kouber -->
<sect1 xml:id="control-structures.goto" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title><literal>goto</literal></title>
+ <?phpdoc print-version-for="goto"?>
<para>
- Операторът <literal>goto</literal> може да бъде използван за скок до
- друга инструкция в програмата. Желаното място се специфицира с етикет
- и точка и запетая, а този етикет се поставя след <literal>goto</literal>.
+ <mediaobject>
+ <alt>Кое е най-лошото нещо, което може да се случи при употребата на оператора goto?</alt>
+ <imageobject>
+ <imagedata fileref="en/language/figures/xkcd-goto.png" format="PNG"/>
+ </imageobject>
+ </mediaobject>
+ Снимка на <link xlink:href="&url.xkcd;292">xkcd</link>
+ </para>
+ <para>
+ Операторът <literal>goto</literal> може да бъде използван за скок в друга
+ част на програмата. Мястото, до където трябва да скочи се указва с етикет,
+ последван от двоеточие, като след оператора <literal>goto</literal> се указва
+ желаният етикет за прехода. Операторът не
+ е неограничен "<literal>goto</literal>". Целевият
+ етикет трябва да се намира в същия файл и в същия контекст, което означава, че не може
+ да скочите извън текущата функция или метод. Също така
+ не можете да скочите в цикъл или switch структура. Можете да скочите
+ извън тях, като обикновено оператора <literal>goto</literal> се използва
+ при <literal>break</literal> на много нива.
</para>
<para>
<example>
@@ -31,18 +48,61 @@
</screen>
</example>
</para>
+ <para>
+ <example>
+ <title>Пример за <literal>goto</literal> с цикъл</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+for($i=0,$j=50; $i<100; $i++) {
+ while($j--) {
+ if($j==17) goto end;
+ }
+}
+echo "i = $i";
+end:
+echo 'j hit 17';
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+j hit 17
+]]>
+ </screen>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title>Това няма да проработи</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+goto loop;
+for($i=0,$j=50; $i<100; $i++) {
+ while($j--) {
+ loop:
+ }
+}
+echo "$i = $i";
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+Fatal error: 'goto' into loop or switch statement is disallowed in
+script on line 2
+]]>
+ </screen>
+ </example>
+ </para>
<note>
<para>
Операторът <literal>goto</literal> е наличен от PHP 5.3.
</para>
</note>
- <warning>
- <para>
- Скачането в цикъл или конструкция switch не е разрешено. В този случай ще бъде изведена
- фатална грешка.
- </para>
- </warning>
-
</sect1>
<!-- Keep this comment at the end of the file