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) => 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