svn: /phpdoc/ru/trunk/ appendices/reserved.xml language/functions.xml

[email protected] (Sergey Panteleev)
Newsgroups php.doc.ru
Message-ID <[email protected]>
sergey                                   Mon, 27 Apr 2020 04:30:24 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=349706

Log:
docs(ru): Updated to English revision

Changed paths:
    U   phpdoc/ru/trunk/appendices/reserved.xml
    U   phpdoc/ru/trunk/language/functions.xml
svn-diffs-349706.txt (text/x-diff, 9.8 KB)
Modified: phpdoc/ru/trunk/appendices/reserved.xml
===================================================================
--- phpdoc/ru/trunk/appendices/reserved.xml	2020-04-27 01:08:59 UTC (rev 349705)
+++ phpdoc/ru/trunk/appendices/reserved.xml	2020-04-27 04:30:24 UTC (rev 349706)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- EN-Revision: 346864 Maintainer: mch Status: ready -->
+<!-- EN-Revision: 349701 Maintainer: mch Status: ready -->
 <!-- Reviewed: yes Maintainer: lex -->
 <!-- $Revision$ -->
 <appendix xml:id="reserved" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
@@ -139,16 +139,19 @@
        <link linkend="language.exceptions">finally</link> (с PHP 5.5)
       </entry>
       <entry>
+       <link linkend="functions.arrow">fn</link> (с PHP 7.4)
+      </entry>
+      <entry>
        <link linkend="control-structures.for">for</link>
       </entry>
       <entry>
        &foreach;
       </entry>
+     </row>
+     <row>
       <entry>
        <link linkend="functions.user-defined">function</link>
       </entry>
-     </row>
-     <row>
       <entry>
        <link linkend="language.variables.scope">global</link>
       </entry>
@@ -161,6 +164,8 @@
       <entry>
        <link linkend="language.oop5.interfaces">implements</link>
       </entry>
+     </row>
+     <row>
       <entry>
        <function>include</function>
       </entry>
@@ -167,8 +172,6 @@
       <entry>
        <function>include_once</function>
       </entry>
-     </row>
-     <row>
       <entry>
        <link linkend="language.operators.type">instanceof</link>
       </entry>
@@ -178,6 +181,8 @@
       <entry>
        <link linkend="language.oop5.interfaces">interface</link>
       </entry>
+     </row>
+     <row>
       <entry>
        <function>isset</function>
       </entry>
@@ -184,8 +189,6 @@
       <entry>
        <function>list</function>
       </entry>
-     </row>
-     <row>
       <entry>
        <link linkend="language.namespaces">namespace</link> (с PHP 5.3)
       </entry>
@@ -195,11 +198,11 @@
       <entry>
        <link linkend="language.operators.logical">or</link>
       </entry>
+     </row>
+     <row>
       <entry>
        <function>print</function>
       </entry>
-     </row>
-     <row>
       <entry>
        <link linkend="language.oop5.visibility">private</link>
       </entry>
@@ -212,6 +215,8 @@
       <entry>
        <function>require</function>
       </entry>
+     </row>
+     <row>
       <entry>
        <function>require_once</function>
       </entry>
@@ -218,8 +223,7 @@
       <entry>
        <function>return</function>
       </entry>
-     </row>
-     <row>
+
       <entry>
        <link linkend="language.variables.scope">static</link>
       </entry>
@@ -229,11 +233,12 @@
       <entry>
        <link linkend="language.exceptions">throw</link>
       </entry>
+     </row>
+     <row>
       <entry>
        <link linkend="language.oop5.traits">trait</link> (с PHP 5.4)
       </entry>
-     </row>
-     <row>
+
       <entry>
        <link linkend="language.exceptions">try</link>
       </entry>
@@ -246,11 +251,12 @@
       <entry>
        <link linkend="language.oop5.properties">var</link>
       </entry>
+     </row>
+     <row>
       <entry>
        <link linkend="control-structures.while">while</link>
       </entry>
-     </row>
-     <row>
+
       <entry>
        <link linkend="language.operators.logical">xor</link>
       </entry>
@@ -262,8 +268,6 @@
       </entry>
       <entry>
       </entry>
-      <entry>
-      </entry>
      </row>
     </tbody>
    </tgroup>

Modified: phpdoc/ru/trunk/language/functions.xml
===================================================================
--- phpdoc/ru/trunk/language/functions.xml	2020-04-27 01:08:59 UTC (rev 349705)
+++ phpdoc/ru/trunk/language/functions.xml	2020-04-27 04:30:24 UTC (rev 349706)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: 349655 Maintainer: sergey Status: ready -->
+<!-- EN-Revision: 349700 Maintainer: sergey Status: ready -->
 <!-- Reviewed: no -->

 <chapter xml:id="language.functions" xmlns="http://docbook.org/ns/docbook">
@@ -1753,6 +1753,168 @@

  </sect1>

+ <sect1 xml:id="functions.arrow">
+   <title>Стрелочные функции</title>
+
+   <simpara>
+    Стрелочные функции были введены в PHP 7.4, как более лаконичный синтаксис для <link linkend="functions.anonymous">анонимных функций</link>.
+   </simpara>
+   <simpara>
+    И анонимные, и стрелочные функции реализованы с использованием класса <link linkend="class.closure"><classname>Closure</classname></link>.
+   </simpara>
+
+   <simpara>
+    Базовая форма стрелочных функций
+    <code>fn (argument_list) =&gt; expr</code>.
+   </simpara>
+
+   <simpara>
+    Стрелочные функции поддерживают те же функции, что и <link linkend="functions.anonymous">анонимные функции</link>,
+    за исключением того, что использование переменных из родительской области всегда выполняется автоматически.
+   </simpara>
+
+   <simpara>
+    Когда переменная, используемая в выражении, определена в родительской области,
+    она будет неявно захвачена по значению.
+    В следующем примере функции <varname>$fn1</varname> и
+    <varname>$fn2</varname> ведут себя одинаково.
+   </simpara>
+
+   <para>
+    <example>
+     <title>Стрелочные функции захватывают переменные по значению автоматически</title>
+     <programlisting role="php">
+<![CDATA[
+<?php
+
+$y = 1;
+
+$fn1 = fn($x) => $x + $y;
+// эквивалентно использованию $y по значению:
+$fn2 = function ($x) use ($y) {
+    return $x + $y;
+};
+
+var_export($fn1(3));
+?>
+]]>
+     </programlisting>
+     &example.outputs;
+     <screen>
+<![CDATA[
+4
+]]>
+      </screen>
+    </example>
+   </para>
+   <simpara>
+    Это также работает, если стрелочные функции вложены:
+   </simpara>
+   <para>
+    <example>
+     <title>Стрелочные функции захватывают переменные по значению автоматически, даже когда они вложены</title>
+     <programlisting role="php">
+<![CDATA[
+<?php
+
+$z = 1;
+$fn = fn($x) => fn($y) => $x * $y + $z;
+// Выведет 51
+var_export($fn(5)(10));
+?>
+]]>
+     </programlisting>
+    </example>
+   </para>
+   <simpara>
+    Подобно анонимным функциям,
+    синтаксис стрелочных функций допускает произвольные сигнатуры функций,
+    включая типы параметров и возвращаемых значений, значения по умолчанию, переменные,
+    а также передачу и возврат по ссылке.
+    Все перечисленные ниже являются корректными примерами стрелочных функций:
+   </simpara>
+   <para>
+    <example>
+     <title>Примеры использования стрелочных функций</title>
+     <programlisting role="php">
+<![CDATA[
+<?php
+
+fn(array $x) => $x;
+static fn(): int => $x;
+fn($x = 42) => $x;
+fn(&$x) => $x;
+fn&($x) => $x;
+fn($x, ...$rest) => $rest;
+
+?>
+]]>
+     </programlisting>
+    </example>
+   </para>
+   <simpara>
+    Стрелочные функции используют привязку переменных по значению.
+    Это примерно эквивалентно выполнению <code>use($x)</code> для каждой
+    переменной <varname>$x</varname>, используемой внутри стрелочной функции.
+    Привязка по значению означает, что невозможно изменить какие-либо значения
+    из внешней области.
+    Вместо этого можно использовать <link linkend="functions.anonymous">анонимные функции</link>
+    для привязок по ссылкам.
+   </simpara>
+   <para>
+    <example>
+     <title>Значения из внешней области видимости не могут быть изменены стрелочными функциями</title>
+     <programlisting role="php">
+<![CDATA[
+<?php
+
+$x = 1;
+$fn = fn() => $x++; // Никакого эффекта
+$fn();
+var_export($x);  // Выведет 1
+
+?>
+]]>
+     </programlisting>
+    </example>
+   </para>
+
+   <sect2 role="changelog">
+    &reftitle.changelog;
+    <para>
+     <informaltable>
+      <tgroup cols="2">
+       <thead>
+        <row>
+         <entry>&Version;</entry>
+         <entry>&Description;</entry>
+        </row>
+       </thead>
+       <tbody>
+        <row>
+         <entry>7.4.0</entry>
+         <entry>
+          Стрелочные функции стали доступны
+         </entry>
+        </row>
+       </tbody>
+      </tgroup>
+     </informaltable>
+    </para>
+   </sect2>
+
+   <sect2 role="notes">
+    &reftitle.notes;
+    <note>
+     <simpara>
+      Можно использовать <function>func_num_args</function>,
+      <function>func_get_arg</function> и <function>func_get_args</function>
+      в стрелочной функции.
+     </simpara>
+    </note>
+   </sect2>
+  </sect1>
+
 </chapter>

 <!-- Keep this comment at the end of the file
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.