svn: /phpdoc/ru/trunk/language/ functions.xml
[email protected] (Sergey Panteleev) Sat, 14 Nov 2020 07:02:16 +0000
| Newsgroups | php.doc.ru |
|---|---|
| Message-ID | <[email protected]> |
sergey Sat, 14 Nov 2020 07:02:16 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=351389
Log:
docs(ru): Updated to English revision
Changed paths:
U phpdoc/ru/trunk/language/functions.xml
svn-diffs-351389.txt
(text/x-diff, 41.3 KB)
Modified: phpdoc/ru/trunk/language/functions.xml
===================================================================
--- phpdoc/ru/trunk/language/functions.xml 2020-11-14 06:26:51 UTC (rev 351388)
+++ phpdoc/ru/trunk/language/functions.xml 2020-11-14 07:02:16 UTC (rev 351389)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 350788 Maintainer: sergey Status: ready -->
+<!-- EN-Revision: 351365 Maintainer: sergey Status: ready -->
<!-- Reviewed: yes -->
<chapter xml:id="language.functions" xmlns="http://docbook.org/ns/docbook">
@@ -358,443 +358,42 @@
</para>
<note>
<simpara>
- Начиная с PHP 5, значения по умолчанию могут быть переданы по ссылке.
+ Значения по умолчанию могут быть переданы по ссылке.
</simpara>
</note>
</sect2>
- <sect2 xml:id="functions.arguments.type-declaration">
- <title>Объявление типов</title>
+ <sect2 xml:id="functions.variable-arg-list">
+ <title>Списки аргументов переменной длины</title>
+ <simpara>
+ PHP поддерживает списки аргументов переменной длины для функций,
+ определяемых пользователем с помощью добавления
+ многоточия (<literal>...</literal>).
+ </simpara>
+
<note>
- <para>
- Объявление типов также известно, как подсказки для типов в PHP 5.
- </para>
+ <simpara>
+ Также можно добиться аргументов переменной длины, используя функции
+ <function>func_num_args</function>,
+ <function>func_get_arg</function> и
+ <function>func_get_args</function>.
+ Этот метод не рекомендуется, поскольку он использовался до введения.
+ токена <literal>...</literal>.
+ </simpara>
</note>
<para>
- Объявления типов позволяют функциям строго задавать тип передаваемых параметров. Передача в
- функцию значений несоответствующего типа будет приводить к ошибке: в PHP 5 это будет
- обрабатываемая фатальная ошибка, а в PHP 7 будет выбрасываться исключение
- <classname>TypeError</classname>.
- </para>
-
- <para>
- Чтобы объявить тип аргумента, необходимо перед его именем добавить имя требуемого типа.
- Объявление типов может принимать значения &null;, если значение по умолчанию для аргумента является &null;.
- </para>
-
- <sect3 xml:id="functions.arguments.type-declaration.types">
- <title>Допустимые типы</title>
- <informaltable>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Тип</entry>
- <entry>Описание</entry>
- <entry>Минимальная версия PHP</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>Имя класса/интерфейса</entry>
- <entry>
- Аргумент должен быть &instanceof;, что и имя класса или интерфейса.
- </entry>
- <entry>PHP 5.0.0</entry>
- </row>
- <row>
- <entry><literal>self</literal></entry>
- <entry>
- Этот параметр должен быть &instanceof; того же класса, в методе
- которого он указан. Это можно использовать только в методах
- класса или экземпляра.
- </entry>
- <entry>PHP 5.0.0</entry>
- </row>
- <row>
- <entry><type>array</type></entry>
- <entry>
- Аргумент должен быть типа <type>array</type>.
- </entry>
- <entry>PHP 5.1.0</entry>
- </row>
- <row>
- <entry><type>callable</type></entry>
- <entry>
- Аргумент должен быть корректным <type>callable</type>-типом.
- </entry>
- <entry>PHP 5.4.0</entry>
- </row>
- <row>
- <entry><type>bool</type></entry>
- <entry>
- Аргумент должен быть типа <type>boolean</type>.
- </entry>
- <entry>PHP 7.0.0</entry>
- </row>
- <row>
- <entry><type>float</type></entry>
- <entry>
- Аргумент должен быть типа <type>float</type>.
- </entry>
- <entry>PHP 7.0.0</entry>
- </row>
- <row>
- <entry><type>int</type></entry>
- <entry>
- Аргумент должен быть типа <type>integer</type>.
- </entry>
- <entry>PHP 7.0.0</entry>
- </row>
- <row>
- <entry><type>string</type></entry>
- <entry>
- Аргумент должен иметь тип <type>string</type>.
- </entry>
- <entry>PHP 7.0.0</entry>
- </row>
- <row>
- <entry><literal>iterable</literal></entry>
- <entry>
- Параметр должен быть либо массивом, либо экземпляром класса, реализующего <classname>Traversable</classname>.
- </entry>
- <entry>PHP 7.1.0</entry>
- </row>
- <row>
- <entry><literal>object</literal></entry>
- <entry>
- Параметр должен быть объектом (<type>object</type>).
- </entry>
- <entry>PHP 7.2.0</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
+ Список аргументов может содержать многоточие
+ <literal>...</literal>, чтобы показать, что функция принимает переменное
+ количество аргументов. Аргументы в этом случае будут переданы в виде массива.
+ Например:
- <warning>
- <para>
- Псевдонимы для вышеперечисленных скалярных типов не поддерживаются.
- Вместо этого они рассматриваются как имена классов или интерфейсов.
- К примеру, используя <literal>boolean</literal> как параметр или
- возвращаемое значение, потребует, чтобы эти аргумент или
- возвращаемое значение были &instanceof; класса или интерфейса
- <literal>boolean</literal>, а не типа <type>bool</type>:
- </para>
- <para>
- <example>
- <programlisting role="php">
-<![CDATA[
- <?php
- function test(boolean $param) {}
- test(true);
- ?>
- ]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
- Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of boolean, boolean given, called in - on line 1 and defined in -:1
- ]]>
- </screen>
- </example>
- </para>
- </warning>
- </sect3>
-
- <sect3 xml:id="functions.arguments.type-declaration.examples">
- &reftitle.examples;
<example>
- <title>Объявление типа базового класса</title>
+ <title>Использование <literal>...</literal> для доступа к аргументам</title>
<programlisting role="php">
<![CDATA[
<?php
-class C {}
-class D extends C {}
-
-// Это не является расширением класса C.
-class E {}
-
-function f(C $c) {
- echo get_class($c)."\n";
-}
-
-f(new C);
-f(new D);
-f(new E);
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-C
-D
-
-Fatal error: Uncaught TypeError: Argument 1 passed to f() must be an instance of C, instance of E given, called in - on line 14 and defined in -:8
-Stack trace:
-#0 -(14): f(Object(E))
-#1 {main}
- thrown in - on line 8
-]]>
- </screen>
- </example>
-
- <example>
- <title>Объявление типа базового интерфейса</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-interface I { public function f(); }
-class C implements I { public function f() {} }
-
-// Это не реализует интерфейс I.
-class E {}
-
-function f(I $i) {
- echo get_class($i)."\n";
-}
-
-f(new C);
-f(new E);
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-C
-
-Fatal error: Uncaught TypeError: Argument 1 passed to f() must implement interface I, instance of E given, called in - on line 13 and defined in -:8
-Stack trace:
-#0 -(13): f(Object(E))
-#1 {main}
- thrown in - on line 8
-]]>
- </screen>
- </example>
-
- <example>
- <title>Типизированные параметры, передаваемые по ссылке</title>
- <simpara>
- Объявленные типы параметров-ссылок проверяются при вызове функции,
- но не при возврате функции, поэтому после того,
- как функция вернула значение, тип аргумента может измениться.
- </simpara>
- <programlisting role="php">
-<![CDATA[
-<?php
-function array_baz(array &$param)
-{
- $param = 1;
-}
-$var = [];
-array_baz($var);
-var_dump($var);
-array_baz($var);
-?>
-]]>
- </programlisting>
- &example.outputs.similar;
- <screen>
- <![CDATA[
- int(1)
-
- Fatal error: Uncaught TypeError: Argument 1 passed to array_baz() must be of the type array, int given, called in %s on line %d
- ]]>
- </screen>
- </example>
-
- <example>
- <title>Обнуляемое объявление типа</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-class C {}
-
-function f(C $c = null) {
- var_dump($c);
-}
-
-f(new C);
-f(null);
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-object(C)#1 (0) {
-}
-NULL
-]]>
- </screen>
- </example>
- </sect3>
-
- <sect3 xml:id="functions.arguments.type-declaration.strict">
- <title>Строгая типизация</title>
-
- <para>
- По умолчанию PHP будет пытаться привести значения несоответствующих типов
- к скалярному типу, если это возможно. Например, если в функцию передается
- целое число (<type>integer</type>), а тип аргумента объявлен как строка
- (<type>string</type>), в итоге
- функция получит преобразованное в строку (<type>string</type>) значение.
- </para>
-
- <para>
- Для отдельных файлов можно включать режим строгой типизации. В этом режиме
- в функцию можно передавать значения только тех типов, которые объявлены для
- аргументов. В противном случае будет выбрасываться исключение
- <classname>TypeError</classname>. Есть лишь одно исключение -
- целое число (<type>integer</type>)
- можно передать в функцию, которая ожидает значение типа <type>float</type>.
- Вызовы функций внутри встроенных функций не будут затронуты
- директивой <literal>strict_types</literal>.
- </para>
-
- <para>
- Для включения режима строгой типизации используется выражение &declare; в объявлении
- <literal>strict_types</literal>:
- </para>
-
- <caution>
- <para>
- Включение режима строгой типизации также повлияет на
- <link linkend="functions.returning-values.type-declaration">объявления типов возвращаемых
- значений</link>.
- </para>
- </caution>
-
- <note>
- <para>
- Режим строгой типизации распространяется на вызовы функций, совершенные
- <emphasis>из</emphasis> файла, в котором этот режим включен, а не на функции, которые в
- этом файле объявлены. Если файл без строгой типизации вызывает функцию, которая объявлена в
- файле с включенным режимом, значения аргументов будут приведены к нужным типам и ошибок
- не последует.
- </para>
- </note>
-
- <note>
- <para>
- Строгая типизация применима только к скалярным типам и работает только в PHP 7.0.0 и выше.
- Равно как и сами объявления скалярных типов добавлены в этой версии.
- </para>
- </note>
-
- <example>
- <title>Строгая типизация</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-declare(strict_types=1);
-
-function sum(int $a, int $b) {
- return $a + $b;
-}
-
-var_dump(sum(1, 2));
-var_dump(sum(1.5, 2.5));
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-int(3)
-
-Fatal error: Uncaught TypeError: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 9 and defined in -:4
-Stack trace:
-#0 -(9): sum(1.5, 2.5)
-#1 {main}
- thrown in - on line 4
-]]>
- </screen>
- </example>
-
- <example>
- <title>Слабая типизация</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-function sum(int $a, int $b) {
- return $a + $b;
-}
-
-var_dump(sum(1, 2));
-
-// Будут приведены к целым числам: обратите внимание на результат ниже!
-var_dump(sum(1.5, 2.5));
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-int(3)
-int(3)
-]]>
- </screen>
- </example>
-
- <example>
- <title>Обработка исключения <classname>TypeError</classname></title>
- <programlisting role="php">
-<![CDATA[
-<?php
-declare(strict_types=1);
-
-function sum(int $a, int $b) {
- return $a + $b;
-}
-
-try {
- var_dump(sum(1, 2));
- var_dump(sum(1.5, 2.5));
-} catch (TypeError $e) {
- echo 'Ошибка: '.$e->getMessage();
-}
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-int(3)
-Ошибка: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 10
-]]>
- </screen>
- </example>
- </sect3>
- </sect2>
- <sect2 xml:id="functions.variable-arg-list">
- <title>Списки аргументов переменной длины</title>
-
- <simpara>
- PHP поддерживает списки аргументов переменной длины для функций,
- определяемых пользователем. Для версий PHP 5.6 и выше это делается
- добавлением многоточия (<literal>...</literal>). Для версий 5.5 и старше
- используются функции <function>func_num_args</function>,
- <function>func_get_arg</function> и
- <function>func_get_args</function>.
- </simpara>
-
- <sect3 xml:id="functions.variable-arg-list.new">
- <title><literal>...</literal> в PHP 5.6+</title>
-
- <para>
- В версиях PHP 5.6 и выше список аргументов может содержать многоточие
- <literal>...</literal>, чтобы показать, что функция принимает переменное
- количество аргументов. Аргументы в этом случае будут переданы в виде массива.
- Например:
-
- <example>
- <title>Использование <literal>...</literal> для доступа к аргументам</title>
- <programlisting role="php">
-<![CDATA[
-<?php
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
@@ -814,16 +413,16 @@
]]>
</screen>
</example>
- </para>
+ </para>
+
+ <para>
+ Многоточие (<literal>...</literal>) можно использовать при вызове функции,
+ чтобы распаковать массив (<type>array</type>) или <classname>Traversable</classname>
+ переменную в список аргументов:
- <para>
- Многоточие (<literal>...</literal>) можно использовать при вызове функции,
- чтобы распаковать массив (<type>array</type>) или <classname>Traversable</classname>
- переменную в список аргументов:
-
- <example>
- <title>Использование <literal>...</literal> для передачи аргументов</title>
- <programlisting role="php">
+ <example>
+ <title>Использование <literal>...</literal> для передачи аргументов</title>
+ <programlisting role="php">
<![CDATA[
<?php
function add($a, $b) {
@@ -845,24 +444,24 @@
]]>
</screen>
</example>
- </para>
+ </para>
+
+ <para>
+ Можно задать несколько аргументов в привычном виде, а затем добавить
+ <literal>...</literal>. В этом случае <literal>...</literal> поместит
+ в массив только те аргументы, которые не нашли соответствия указанным
+ в объявлении функции.
+ </para>
+
+ <para>
+ Также можно добавить
+ <link linkend="language.types.declarations">объявление типов</link> перед
+ <literal>...</literal>. В этом случае PHP будет следить, чтобы все аргументы
+ обработанные многоточием (<literal>...</literal>) были того же типа, что указан в подсказке.
- <para>
- Можно задать несколько аргументов в привычном виде, а затем добавить
- <literal>...</literal>. В этом случае <literal>...</literal> поместит
- в массив только те аргументы, которые не нашли соответствия указанным
- в объявлении функции.
- </para>
-
- <para>
- Также можно добавить
- <link linkend="language.oop5.typehinting">подсказку типа</link> перед
- <literal>...</literal>. В этом случае PHP будет следить, чтобы все аргументы
- обработанные многоточием (<literal>...</literal>) были того же типа, что указан в подсказке.
-
- <example>
- <title>Аргументы с подсказкой типов</title>
- <programlisting role="php">
+ <example>
+ <title>Аргументы с подсказкой типов</title>
+ <programlisting role="php">
<![CDATA[
<?php
function total_intervals($unit, DateInterval ...$intervals) {
@@ -890,16 +489,15 @@
]]>
</screen>
</example>
- </para>
-
- <para>
- В конце концов, можно передавать аргументы
- <link linkend="functions.arguments.by-reference">по ссылке</link>. Для этого
- перед <literal>...</literal> нужно поставить амперсанд
- (<literal>&</literal>).
- </para>
- </sect3>
+ </para>
+ <para>
+ В конце концов, можно передавать аргументы
+ <link linkend="functions.arguments.by-reference">по ссылке</link>. Для этого
+ перед <literal>...</literal> нужно поставить амперсанд
+ (<literal>&</literal>).
+ </para>
+
<sect3 xml:id="functions.variable-arg-list.old">
<title>Предыдущие версии PHP</title>
@@ -913,10 +511,10 @@
<para>
В первом примере выше было показано, как задать список аргументов переменной длины
- для версий PHP 5.5 и более ранних:
+ для предыдущих версий PHP:
<example>
- <title>Доступ к аргументам в PHP 5.5 и ранних версий</title>
+ <title>Доступ к аргументам в предыдущих версиях PHP</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -940,7 +538,7 @@
</screen>
</example>
</para>
- </sect3>
+ </sect3>
</sect2>
</sect1>
@@ -1029,147 +627,6 @@
к разделу документации <link linkend="language.references">Подробно о ссылках</link>.
</simpara>
</sect2>
-
- <sect2 xml:id="functions.returning-values.type-declaration">
- <title>Объявление типов возвращаемых значений</title>
-
- <para>
- В PHP 7 добавлена возможность объявлять тип возвращаемого значения. Аналогично
- <link linkend="functions.arguments.type-declaration">объявлению типов аргументов</link>
- можно задать тип значения, которое будет возвращаться функцией.
- <link linkend="functions.arguments.type-declaration.types">Типы</link>, которые можно
- объявить для возвращаемых значений те же, что и для аргументов функций.
- </para>
-
- <para>
- <link linkend="functions.arguments.type-declaration.strict">Режим строгой типизации</link>
- также работает при объявлении типа возвращаемого значения. В режиме слабой типизации
- по умолчанию возвращаемые значения будут приводиться к корректному типу, если они
- еще не относятся к этому типу. Если это преобразование типа не разрешено
- (например, при возврате массива (&array;) из функции с возвращаемым типом целое число (&integer;)),
- будет выброшена ошибка <classname>TypeError</classname>.
- При строгой типизации возвращаемое значение должно быть заданного типа, иначе будет выброшено
- исключение <classname>TypeError</classname>.
- </para>
-
- <para>
- Начиная с PHP 7.1.0, операторы возврата без триггера аргумента <constant>E_COMPILE_ERROR</constant>,
- если только тип возврата не <type>void</type>, и в этом случае операторы возврата
- с аргументом вызывают эту ошибку.
- </para>
-
- <para>
- Начиная с PHP 7.1.0 возвращаемые значения могут быть помечены как обнуляемые,
- путём добавления префикса в виде вопросительного знака (<literal>?</literal>)
- к названию типу. Это означает, что функция возвращает либо значение
- указанного типа, либо значение &null;.
- </para>
-
- <note>
- <para>
- Если переопределяется родительский метод, возвращаемое значение дочернего метода должно
- быть того же типа, что и родительского. Если в родительском методе не задан тип возвращаемого
- значения, то в дочернем методе можно указать любой.
- </para>
- </note>
-
- <sect3 xml:id="functions.returning-values.type-declaration.examples">
- &reftitle.examples;
-
- <example>
- <title>Обычное объявление типа возвращаемого значения</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-function sum($a, $b): float {
- return $a + $b;
-}
-
-// Будет возвращаться значение типа float.
-var_dump(sum(1, 2));
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-float(3)
-]]>
- </screen>
- </example>
-
- <example>
- <title>То же в режиме строгой типизации</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-declare(strict_types=1);
-
-function sum($a, $b): int {
- return $a + $b;
-}
-
-var_dump(sum(1, 2));
-var_dump(sum(1, 2.5));
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-int(3)
-
-Fatal error: Uncaught TypeError: Return value of sum() must be of the type integer, float returned in - on line 5 in -:5
-Stack trace:
-#0 -(9): sum(1, 2.5)
-#1 {main}
- thrown in - on line 5
-]]>
- </screen>
- </example>
-
- <example>
- <title>Возврат объектов</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-class C {}
-
-function getC(): C {
- return new C;
-}
-
-var_dump(getC());
-?>
-]]>
- </programlisting>
- &example.outputs;
- <screen>
-<![CDATA[
-object(C)#1 (0) {
-}
-]]>
- </screen>
- </example>
-
- <example>
- <title>Объявление обнуляемого типа (начиная с PHP 7.1.0)</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-function get_item(): ?string {
- if (isset($_GET['item'])) {
- return $_GET['item'];
- } else {
- return null;
- }
-}
-?>
-]]>
- </programlisting>
- </example>
- </sect3>
- </sect2>
</sect1>
<sect1 xml:id="functions.variable-functions">
@@ -1284,9 +741,8 @@
</example>
</para>
<para>
- С версии PHP 5.4.0, можно вызывать <type>callable</type>-функцию, помещенную в переменную.
<example>
- <title>Сallable-фукнции</title>
+ <title>Сложные callable-фукнции</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -1307,7 +763,7 @@
$func = array(new Foo, "baz");
$func(); // выведет "baz"
$func = "Foo::bar";
-$func(); // выведет "bar" в PHP 7.0.0 и выше; в предыдущих версиях это приведет к фатальной ошибке
+$func(); // выведет "bar"
?>
]]>
</programlisting>
@@ -1314,41 +770,17 @@
</example>
</para>
- <para>
- Смотрите также <function>is_callable</function>, <function>call_user_func</function>,
- <link linkend="language.variables.variable">Переменные переменные</link> и
- <function>function_exists</function>.
- </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.0.0</entry>
- <entry>
- 'ClassName::methodName' доступна как функция-переменная.
- </entry>
- </row>
- <row>
- <entry>5.4.0</entry>
- <entry>
- Массивы, являющиеся корректными callable-методами, доступны как функции-переменные.
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </para>
- </sect2>
+ <sect2 role="seealso">
+ &reftitle.seealso;
+ <para>
+ <simplelist>
+ <member><function>is_callable</function></member>
+ <member><function>call_user_func</function></member>
+ <member><function>function_exists</function></member>
+ <member><link linkend="language.variables.variable">переменные переменные</link></member>
+ </simplelist>
+ </para>
+ </sect2>
</sect1>
<sect1 xml:id="functions.internal">
@@ -1398,12 +830,18 @@
на него нельзя полагаться.
</simpara>
</note>
- <para>
- Ознакомьтесь также с описанием функции <function>function_exists</function>,
- <link linkend="funcref">справочником функций</link> и функциями
- <function>get_extension_funcs</function> и
- <function>dl</function>.
- </para>
+
+ <sect2 role="seealso">
+ &reftitle.seealso;
+ <para>
+ <simplelist>
+ <member><function>function_exists</function></member>
+ <member><link linkend="funcref">справочник функций</link></member>
+ <member><function>get_extension_funcs</function></member>
+ <member><function>dl</function></member>
+ </simplelist>
+ </para>
+ </sect2>
</sect1>
<sect1 xml:id="functions.anonymous">
@@ -1632,15 +1070,9 @@
}
]]>
</screen>
- &example.outputs.53;
- <screen>
-<![CDATA[
-Notice: Undefined variable: this in script.php on line 8
-NULL]]>
- </screen>
</example>
<para>
- Начиная с PHP 5.4.0, при объявлении в контексте класса, текущий
+ При объявлении в контексте класса, текущий
класс будет автоматически связан с ним, делая <literal>$this</literal>
доступным внутри функций класса. Если вы не хотите автоматического
связывания с текущим классом, используйте <link
@@ -1650,7 +1082,7 @@
<sect2 xml:id="functions.anonymous-functions.static">
<title>Статические анонимные функции</title>
<para>
- Начиная с PHP 5.4, анонимные функции могут быть объявлены статически.
+ Анонимные функции могут быть объявлены статически.
Это предотвратит их автоматическое связывание с текущим классом.
Объекты также не будут с ними связаны во время выполнения.
</para>
@@ -1731,18 +1163,6 @@
и параметр.
</entry>
</row>
- <row>
- <entry>5.4.0</entry>
- <entry>
- Стало возможным использовать <varname>$this</varname>, а также объявлять статически.
- </entry>
- </row>
- <row>
- <entry>5.3.0</entry>
- <entry>
- Появление анонимных функций.
- </entry>
- </row>
</tbody>
</tgroup>
</informaltable>
@@ -1763,36 +1183,36 @@
</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">
+ <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
@@ -1813,16 +1233,16 @@
<![CDATA[
4
]]>
- </screen>
+ </screen>
</example>
- </para>
- <simpara>
- Это также работает во вложенных стрелочных функций:
- </simpara>
- <para>
- <example>
- <title>Стрелочные функции захватывают переменные по значению автоматически, даже когда они вложены</title>
- <programlisting role="php">
+ </para>
+ <simpara>
+ Это также работает во вложенных стрелочных функций:
+ </simpara>
+ <para>
+ <example>
+ <title>Стрелочные функции захватывают переменные по значению автоматически, даже когда они вложены</title>
+ <programlisting role="php">
<![CDATA[
<?php
@@ -1834,18 +1254,18 @@
]]>
</programlisting>
</example>
- </para>
- <simpara>
- Подобно анонимным функциям,
- синтаксис стрелочных функций допускает произвольные сигнатуры функций,
- включая типы параметров и возвращаемых значений, значения по умолчанию, переменные,
- а также передачу и возврат по ссылке.
- Ниже приведены корректные примеры стрелочных функций:
- </simpara>
- <para>
- <example>
- <title>Примеры использования стрелочных функций</title>
- <programlisting role="php">
+ </para>
+ <simpara>
+ Подобно анонимным функциям,
+ синтаксис стрелочных функций допускает произвольные сигнатуры функций,
+ включая типы параметров и возвращаемых значений, значения по умолчанию, переменные,
+ а также передачу и возврат по ссылке.
+ Ниже приведены корректные примеры стрелочных функций:
+ </simpara>
+ <para>
+ <example>
+ <title>Примеры использования стрелочных функций</title>
+ <programlisting role="php">
<![CDATA[
<?php
@@ -1860,20 +1280,20 @@
]]>
</programlisting>
</example>
- </para>
- <simpara>
- Стрелочные функции используют привязку переменных по значению.
- Это примерно эквивалентно выполнению <code>use($x)</code> для каждой
- переменной <varname>$x</varname>, используемой внутри стрелочной функции.
- Привязка по значению означает, что невозможно изменить какие-либо значения
- из внешней области.
- Вместо этого можно использовать <link linkend="functions.anonymous">анонимные функции</link>
- для привязок по ссылкам.
- </simpara>
- <para>
- <example>
- <title>Значения из внешней области видимости не могут быть изменены стрелочными функциями</title>
- <programlisting role="php">
+ </para>
+ <simpara>
+ Стрелочные функции используют привязку переменных по значению.
+ Это примерно эквивалентно выполнению <code>use($x)</code> для каждой
+ переменной <varname>$x</varname>, используемой внутри стрелочной функции.
+ Привязка по значению означает, что невозможно изменить какие-либо значения
+ из внешней области.
+ Вместо этого можно использовать <link linkend="functions.anonymous">анонимные функции</link>
+ для привязок по ссылкам.
+ </simpara>
+ <para>
+ <example>
+ <title>Значения из внешней области видимости не могут быть изменены стрелочными функциями</title>
+ <programlisting role="php">
<![CDATA[
<?php
@@ -1886,43 +1306,43 @@
]]>
</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 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>
+ </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>