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