mirror of
https://github.com/php/doc-ru.git
synced 2026-03-24 07:42:22 +01:00
* 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 Добавил недостающий тег
275 lines
9.5 KiB
XML
275 lines
9.5 KiB
XML
<?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 = &$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 &= $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>Побитовое исключающее ИЛИ (Xor)</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.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
|
||
-->
|