Skip to content

Commit

Permalink
Update references.xml уточнил изложение
Browse files Browse the repository at this point in the history
  • Loading branch information
mmalferov committed Aug 6, 2024
1 parent 18f2121 commit 0e6fcd4
Showing 1 changed file with 22 additions and 19 deletions.
41 changes: 22 additions & 19 deletions language/references.xml
Original file line number Diff line number Diff line change
Expand Up @@ -236,15 +236,16 @@ $arr2[0]++;
<sect2 xml:id="language.references.whatdo.pass">
<title>Передача по ссылке</title>
<para>
Второе, что умеют делать ссылки, — передавать переменные по ссылке. При этом
локальная переменная, которую создали в функции, и переменная, которую создали в области видимости
вызова, ссылаются на одно и то же содержимое. Следующий пример:
Второе, что умеют делать ссылки, — передавать переменные по ссылке. Для этого создают
две переменные, которые ссылаются на одно и то же содержимое: одну — в функции, а другую —
в области видимости вызова. Следующий пример:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function foo(&$var) {
function foo(&$var)
{
$var++;
}
Expand All @@ -255,7 +256,7 @@ foo($a);
]]>
</programlisting>
</informalexample>
…присвоит переменной <varname>$a</varname> значение 6. Причина состоит в том,
изменит значение, на которое указывает переменная <varname>$a</varname>, на 6. Причина состоит в том,
что в функции <varname>foo</varname> переменная <varname>$var</varname>
ссылается на то же содержимое, что и переменная <varname>$a</varname>. Дополнительную
информацию об этом даёт раздел
Expand All @@ -281,7 +282,8 @@ foo($a);
<![CDATA[
<?php
function foo(&$var) {
function foo(&$var)
{
$var =& $GLOBALS["baz"];
}
Expand All @@ -293,16 +295,17 @@ foo($bar);
</informalexample>
</para>
<simpara>
PHP свяжет переменную <varname>$var</varname> в функции <varname>foo</varname>
с переменной <varname>$bar</varname>, которую передали при вызове,
но затем перепривяжет к переменной <varname>$GLOBALS["baz"]</varname>. Невозможно связать
переменную <varname>$bar</varname> в области видимости вызова с чем-то другим
через механизм ссылок, поскольку переменная <varname>$bar</varname>
недоступна в функции <varname>foo</varname>, её представляет только
переменная <varname>$var</varname>, но у переменной <varname>$var</varname> есть только содержимое
переменной, а не привязка имя-значение в таблице имён переменных.
Вы можете воспользоваться <link linkend="language.references.return">возвратом
ссылок</link> из функции для привязки внешней переменной к другому значению.
Пример выполняет следующее: в функции <varname>foo</varname> переменная <varname>$var</varname>
связывается с переменной <varname>$bar</varname>, которую PHP создал в месте вызова,
но затем повторно связывается с переменной <varname>$GLOBALS["baz"]</varname>. Через механизм ссылок невозможно
связать переменную <varname>$bar</varname> с другим значением в области видимости вызова,
поскольку у функции <varname>foo</varname> нет доступа к переменной <varname>$bar</varname>,
которую представляет только переменная <varname>$var</varname>,
которой доступно только содержимое переменной <varname>$bar</varname>,
но недоступна связка имя-значение, которую хранит таблица символов области видимости вызова.
Привязать внешнюю переменную к другому значению помогает
<link linkend="language.references.return">механизм возврата ссылок</link>,
который связывает ссылки с переменными, которые выбрала функция.
</simpara>
</sect1>

Expand All @@ -323,7 +326,7 @@ function foo(&$var)
$a = 5;
foo($a);
// В этом месте значение переменной $a равно 6
// В этом месте переменная $a указывает на значение 6
?>
]]>
Expand Down Expand Up @@ -415,8 +418,8 @@ foo(new Foobar()); // Вызывает уведомление с PHP 7.0.7
<sect1 xml:id="language.references.return">
<title>Возврат ссылок</title>
<para>
Возврат по ссылке приносит пользу, когда переменную, с которой свяжется ссылка,
требуется определить через функцию. Возвратом по ссылке <emphasis>не</emphasis> пользуются
Возврат по ссылке приносит пользу, когда определить переменную, к которой требуется привязать ссылку,
нужно через функцию. Возвратом по ссылке <emphasis>не</emphasis> пользуются
для повышения производительности. Ядро PHP само оптимизирует производительность.
Ссылки возвращают только по веским техническим причинам.
Ссылки возвращает следующий синтаксис:
Expand Down

0 comments on commit 0e6fcd4

Please sign in to comment.