1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
archived-doc-ru/language/operators/assignment.xml
Mikhail Alferov 190f25bb3e Update operators 1693404 to en (#1066)
* Update operators.xml to en

* Update array.xml to en

* Update assignment.xml to en

* Update bitwise.xml to en

* Update comparison.xml to en

* Update errorcontrol.xml to en

* Update execution.xml to en

* Update increment.xml to en

* Update precedence.xml to en

* Update string.xml to en

* Update array.xml Исправил синтакс. ошибку

* Update bitwise.xml Добавил недостающий тег
2025-04-28 15:00:28 +03:00

275 lines
9.5 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 16934048f79c6e117cd16a23c09c1b2ea502e284 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.operators.assignment">
<title>Операторы присваивания</title>
<titleabbrev>Присваивание</titleabbrev>
<simpara>
Базовый оператор присваивания обозначается символом «=». Кажется,
что это оператор «равно». Это не так.
Оператор присваивания означает, что левый операнд
получает значение правого выражения (то есть левому операнду «будет присвоено значение»).
</simpara>
<para>
Результатом выполнения оператора присваивания будет само присвоенное значение.
То есть, результат выполнения выражения «<literal>$a = 3</literal>» будет равен 3.
Это разрешает делать трюки наподобие:
<example>
<title>Вложенное присваивание</title>
<programlisting role="php">
<![CDATA[
<?php
$a = ($b = 4) + 5; // Значение переменной $a равно 9, а переменной $b присвоилось значение 4
var_dump($a);
?>
]]>
</programlisting>
</example>
</para>
<para>
В дополнение к базовому оператору присваивания существуют «комбинированные операторы»
для всех <link linkend="language.operators">бинарных арифметических</link> операций,
операций объединения массивов и строковых операций, которые дают
присвоить значение в выражении, а затем установить его значение
в результат этого выражения. Например:
<example>
<title>Составное присваивание</title>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$a += 5; // Устанавливает для переменной $a значение 8, как если бы написали: $a = $a + 5;
$b = "Привет";
$b .= "-привет!"; // Устанавливает переменной $b значение "Привет-привет!", как и присваивание $b = $b . "-привет!";
var_dump($a, $b);
?>
]]>
</programlisting>
</example>
</para>
<para>
Обратите внимание, что присвоение копирует оригинальную переменную в новую
(присвоение по значению), поэтому следующие изменения
одной из переменных никак не отразятся на другой. Это также может быть уместным
при копировании чего-то вроде большого массива в длинном цикле.
</para>
<para>
Исключение из обычного для PHP способа присваивания по значению — объекты
(<type>object</type>), которые присваиваются по ссылке.
Принудительно скопировать объекты по значению можно
через ключевое слово <link linkend="language.oop5.cloning">clone</link>.
</para>
<sect2 xml:id="language.operators.assignment.reference">
<title>Присваивание по ссылке</title>
<para>
Присваивание по ссылке тоже поддерживается, для этого можно использовать синтаксис
<computeroutput>$var = &amp;$othervar;</computeroutput>.
Присваивание по ссылке означает, что обе переменные указывают
на одни и те же данные и ничего никуда не копируется.
</para>
<para>
<example>
<title>Assigning by reference</title>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$b = &$a; // $b — это ссылка на переменную $a
print "$a\n"; // печатает 3
print "$b\n"; // печатает 3
$a = 4; // меняем переменную $a
print "$a\n"; // печатает 4
print "$b\n"; // также печатает 4, так как переменная $b — это ссылка на переменную $a,
// а значение переменной $a успело измениться
?>
]]>
</programlisting>
</example>
</para>
<para>
Оператор <link linkend="language.oop5.basic.new">new</link>
автоматически возвращает ссылку, поэтому присваивание результата операции
<link linkend="language.oop5.basic.new">new</link> по ссылке вызывает ошибку.
</para>
<para>
<example>
<title>Оператор new по ссылке</title>
<programlisting role="php">
<![CDATA[
<?php
class C {}
$o = &new C();
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Parse error: syntax error, unexpected token ";", expecting "("
]]>
</screen>
</example>
</para>
<para>
Подробнее о ссылках рассказывает
раздел «<link linkend="language.references">Объяснение ссылок</link>».
</para>
</sect2>
<sect2 xml:id="language.operators.assignment.arithmetic">
<title>Операторы арифметического присваивания</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Пример</entry>
<entry>Эквивалент</entry>
<entry>Операция</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a += $b</entry>
<entry>$a = $a + $b</entry>
<entry>Сложение</entry>
</row>
<row>
<entry>$a -= $b</entry>
<entry>$a = $a - $b</entry>
<entry>Вычитание</entry>
</row>
<row>
<entry>$a *= $b</entry>
<entry>$a = $a * $b</entry>
<entry>Умножение</entry>
</row>
<row>
<entry>$a /= $b</entry>
<entry>$a = $a / $b</entry>
<entry>Деление</entry>
</row>
<row>
<entry>$a %= $b</entry>
<entry>$a = $a % $b</entry>
<entry>Модуль</entry>
</row>
<row>
<entry>$a **= $b</entry>
<entry>$a = $a ** $b</entry>
<entry>Возведение в степень</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 xml:id="language.operators.assignment.bitwise">
<title>Операторы побитового присваивания</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Пример</entry>
<entry>Эквивалент</entry>
<entry>Операция</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a &amp;= $b</entry>
<entry>$a = $a &amp; $b</entry>
<entry>Побитовое И</entry>
</row>
<row>
<entry>$a |= $b</entry>
<entry>$a = $a | $b</entry>
<entry>Побитовое ИЛИ</entry>
</row>
<row>
<entry>$a ^= $b</entry>
<entry>$a = $a ^ $b</entry>
<entry>Побитовое исключающее ИЛИ (Xor)</entry>
</row>
<row>
<entry>$a &lt;&lt;= $b</entry>
<entry>$a = $a &lt;&lt; $b</entry>
<entry>Побитовый сдвиг влево</entry>
</row>
<row>
<entry>$a &gt;&gt;= $b</entry>
<entry>$a = $a &gt;&gt; $b</entry>
<entry>Побитовый сдвиг вправо</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 xml:id="language.operators.assignment.other">
<title>Другие операторы присваивания</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Пример</entry>
<entry>Эквивалент</entry>
<entry>Операция</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a .= $b</entry>
<entry>$a = $a . $b</entry>
<entry>Конкатенация строк</entry>
</row>
<row>
<entry>$a ??= $b</entry>
<entry>$a = $a ?? $b</entry>
<entry>Объединение с Null</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 role="seealso" xml:id="language.operators.assignment.see-also">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="language.operators.arithmetic">Арифметические операторы</link></member>
<member><link linkend="language.operators.bitwise">Побитовые операторы</link></member>
<member><link linkend="language.operators.comparison.coalesce">Операторы объединения с null</link></member>
</simplelist>
</para>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->