svn: /phpdoc/bg/trunk/language/control-structures/ foreach.xml
[email protected] (Stanislav Yordanov) Sat, 25 Jun 2016 21:25:52 +0000
| Newsgroups | php.doc.bg |
|---|---|
| Message-ID | <[email protected]> |
stanprog Sat, 25 Jun 2016 21:25:52 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=339497
Log:
sync with EN
Changed paths:
U phpdoc/bg/trunk/language/control-structures/foreach.xml
Modified: phpdoc/bg/trunk/language/control-structures/foreach.xml
===================================================================
--- phpdoc/bg/trunk/language/control-structures/foreach.xml 2016-06-25 21:16:12 UTC (rev 339496)
+++ phpdoc/bg/trunk/language/control-structures/foreach.xml 2016-06-25 21:25:52 UTC (rev 339497)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 337339 Maintainer: stanprog Status: ready -->
+<!-- EN-Revision: 339330 Maintainer: stanprog Status: ready -->
<!-- Reviewed: yes Maintainer: stanprog -->
<!-- CREDITS: kouber -->
<sect1 xml:id="control-structures.foreach" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
@@ -75,13 +75,49 @@
</programlisting>
</informalexample>
</para>
- <para>
- Обръщането към <literal>$value</literal> по референция е възможно само ако масива
- е референцируем (т.е. ако е променлива). Кодът по-долу няма да работи:
+ <warning>
+ <para>
+ Референцията между <literal>$value</literal> и последния елемент от масива
+ остава дори и след приключването на цикъла <literal>foreach</literal>. Препоръчително
+ е да я унищожите посредством <function>unset</function>.
+ В противен случай, ще се натъкнете на следното поведение:
+ </para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
+$arr = array(1, 2, 3, 4);
+foreach ($arr as &$value) {
+ $value = $value * 2;
+}
+// $arr is now array(2, 4, 6, 8)
+
+// without an unset($value), $value is still a reference to the last item: $arr[3]
+
+foreach ($arr as $key => $value) {
+ // $arr[3] will be updated with each value from $arr...
+ echo "{$key} => {$value} ";
+ print_r($arr);
+}
+// ...until ultimately the second-to-last value is copied onto the last value
+
+// output:
+// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
+// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
+// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
+// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
+?>
+]]>
+ </programlisting>
+ </informalexample>
+ </warning>
+ <para>
+ Преди PHP 5.5.0 обръщането към <literal>$value</literal> е възможно само, ако итерирания масив може да бъде
+ референциран (т.е. ако е променлива). Следният код работи само от HPP 5.5.0:
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+<?php
foreach (array(1, 2, 3, 4) as &$value) {
$value = $value * 2;
}
@@ -90,13 +126,6 @@
</programlisting>
</informalexample>
</para>
- <warning>
- <para>
- Референцията между <literal>$value</literal> и последния елемент от масива
- остава дори и след приключването на цикъла <literal>foreach</literal>. Препоръчително
- е да я унищожите посредством <function>unset</function>.
- </para>
- </warning>
<para>
<note>
<para>
@@ -207,20 +236,20 @@
</programlisting>
</informalexample>
</para>
-
+
<sect2 xml:id="control-structures.foreach.list">
<title>Разопаковане на вложени масиви с list()</title>
<?phpdoc print-version-for="foreach.list"?>
-
+
<para>
В PHP 5.5 е добавена възможността за обхождане на масиви от масиви и разопаковане на
вложени масиви в променливи в цикъл с предаване на <function>list</function>
като стойност.
</para>
-
+
<para>
На пример:
-
+
<informalexample>
<programlisting role="php">
<![CDATA[
@@ -247,12 +276,12 @@
</screen>
</informalexample>
</para>
-
+
<para>
Може да предадете по-малко елементи на <function>list</function> от тези,
които са във вложения масив, при което останалите стойности на масива ще бъдат
игнорирани:
-
+
<informalexample>
<programlisting role="php">
<![CDATA[
@@ -278,11 +307,11 @@
</screen>
</informalexample>
</para>
-
+
<para>
Ако няма достатъчно елементи за попълването на <function>list</function>,
ще бъде генерирано съобщение от тип E_NOTICE:
-
+
<informalexample>
<programlisting role="php">
<![CDATA[
@@ -312,6 +341,44 @@
</informalexample>
</para>
</sect2>
+
+ <sect2 role="changelog">
+ &reftitle.changelog;
+ <para>
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>&Version;</entry>
+ <entry>&Description;</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>7.0.0</entry>
+ <entry>
+ Цикълът <literal>foreach</literal> вече не използва вътрешният указател на масива.
+ </entry>
+ </row>
+ <row>
+ <entry>5.5.0</entry>
+ <entry>
+ Референцирането на <literal>$value</literal> за изрази се поддържа.
+ Преди се поддържаха само променливи.
+ </entry>
+ </row>
+ <row>
+ <entry>5.5.0</entry>
+ <entry>
+ Поддържа се разпакетиране на вложени масиви чрез <function>list</function>.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </para>
+ </sect2>
+
</sect1>
<!-- Keep this comment at the end of the file