<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.operators.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'language.operators.assignment.php',
    1 => 'Присваивание',
    2 => 'Операторы присваивания',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Операторы',
  ),
  'prev' => 
  array (
    0 => 'language.operators.increment.php',
    1 => 'Инкремент и декремент',
  ),
  'next' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Побитовые операторы',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'language/operators/assignment.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.operators.assignment" class="sect1">
 <h2 class="title">Операторы присваивания</h2>
 
 <p class="simpara">
  Базовый оператор присваивания обозначается символом «=». Кажется,
  что это оператор «равно». Это не так.
  Оператор присваивания означает, что левый операнд
  получает значение правого выражения (то есть левому операнду «будет присвоено значение»).
 </p>
 <p class="para">
  Результатом выполнения оператора присваивания будет само присвоенное значение.
  То есть, результат выполнения выражения «<code class="literal">$a = 3</code>» будет равен 3.
  Это разрешает делать трюки наподобие:
  <div class="example" id="example-1">
   <p><strong>Пример #1 Вложенное присваивание</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$a </span><span style="color: #007700">= (</span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">) + </span><span style="color: #0000BB">5</span><span style="color: #007700">; </span><span style="color: #FF8000">// Значение переменной $a равно 9, а переменной $b присвоилось значение 4<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  В дополнение к базовому оператору присваивания существуют «комбинированные операторы»
  для всех <a href="language.operators.php" class="link">бинарных арифметических</a> операций,
  операций объединения массивов и строковых операций, которые дают
  присвоить значение в выражении, а затем установить его значение
  в результат этого выражения. Например:
  <div class="example" id="example-2">
   <p><strong>Пример #2 Составное присваивание</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">+= </span><span style="color: #0000BB">5</span><span style="color: #007700">; </span><span style="color: #FF8000">// Устанавливает для переменной $a значение 8, как если бы написали: $a = $a + 5;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #DD0000">"Привет"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">.= </span><span style="color: #DD0000">"-привет!"</span><span style="color: #007700">; </span><span style="color: #FF8000">// Устанавливает переменной $b значение "Привет-привет!", как и присваивание $b = $b . "-привет!";<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Обратите внимание, что присвоение копирует оригинальную переменную в новую
  (присвоение по значению), поэтому следующие изменения
  одной из переменных никак не отразятся на другой. Это также может быть уместным
  при копировании чего-то вроде большого массива в длинном цикле.
 </p>
 <p class="para">
  Исключение из обычного для PHP способа присваивания по значению — объекты
  (<span class="type"><a href="language.types.object.php" class="type object">object</a></span>), которые присваиваются по ссылке.
  Принудительно скопировать объекты по значению можно
  через ключевое слово <a href="language.oop5.cloning.php" class="link">clone</a>.
 </p>
 <div class="sect2" id="language.operators.assignment.reference">
  <h3 class="title">Присваивание по ссылке</h3>
  <p class="para">
  Присваивание по ссылке тоже поддерживается, для этого можно использовать синтаксис
  <span class="computeroutput">$var = &amp;$othervar;</span>.
  Присваивание по ссылке означает, что обе переменные указывают
  на одни и те же данные и ничего никуда не копируется.
  </p>
  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Пример #3 Assigning by reference</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">; </span><span style="color: #FF8000">// $b — это ссылка на переменную $a<br /><br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// печатает 3<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$b</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// печатает 3<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">; </span><span style="color: #FF8000">// меняем переменную $a<br /><br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// печатает 4<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$b</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// также печатает 4, так как переменная $b — это ссылка на переменную $a,<br />              // а значение переменной $a успело измениться<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
  Оператор <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a>
  автоматически возвращает ссылку, поэтому присваивание результата операции
  <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a> по ссылке вызывает ошибку.
  </p>
  <p class="para">
   <div class="example" id="example-4">
    <p><strong>Пример #4 Оператор new по ссылке</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">C </span><span style="color: #007700">{}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= &amp;new </span><span style="color: #0000BB">C</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    
<div class="example-contents"><p>
 Результат выполнения приведённого примера:
</p></div>

    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: syntax error, unexpected token &quot;;&quot;, expecting &quot;(&quot;
</pre></div>
    </div>
   </div>
  </p>
  <p class="para">
  Подробнее о ссылках рассказывает
  раздел «<a href="language.references.php" class="link">Объяснение ссылок</a>».
  </p>
 </div>
 <div class="sect2" id="language.operators.assignment.arithmetic">
  <h3 class="title">Операторы арифметического присваивания</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Пример</th>
      <th>Эквивалент</th>
      <th>Операция</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a += $b</td>
      <td>$a = $a + $b</td>
      <td>Сложение</td>
     </tr>

     <tr>
      <td>$a -= $b</td>
      <td>$a = $a - $b</td>
      <td>Вычитание</td>
     </tr>

     <tr>
      <td>$a *= $b</td>
      <td>$a = $a * $b</td>
      <td>Умножение</td>
     </tr>

     <tr>
      <td>$a /= $b</td>
      <td>$a = $a / $b</td>
      <td>Деление</td>
     </tr>

     <tr>
      <td>$a %= $b</td>
      <td>$a = $a % $b</td>
      <td>Модуль</td>
     </tr>

     <tr>
      <td>$a **= $b</td>
      <td>$a = $a ** $b</td>
      <td>Возведение в степень</td>
     </tr>

    </tbody>
   
  </table>

 </div>
 <div class="sect2" id="language.operators.assignment.bitwise">
  <h3 class="title">Операторы побитового присваивания</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Пример</th>
      <th>Эквивалент</th>
      <th>Операция</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a &amp;= $b</td>
      <td>$a = $a &amp; $b</td>
      <td>Побитовое И</td>
     </tr>

     <tr>
      <td>$a |= $b</td>
      <td>$a = $a | $b</td>
      <td>Побитовое ИЛИ</td>
     </tr>

     <tr>
      <td>$a ^= $b</td>
      <td>$a = $a ^ $b</td>
      <td>Побитовое исключающее ИЛИ (Xor)</td>
     </tr>

     <tr>
      <td>$a &lt;&lt;= $b</td>
      <td>$a = $a &lt;&lt; $b</td>
      <td>Побитовый сдвиг влево</td>
     </tr>

     <tr>
      <td>$a &gt;&gt;= $b</td>
      <td>$a = $a &gt;&gt; $b</td>
      <td>Побитовый сдвиг вправо</td>
     </tr>

    </tbody>
   
  </table>

 </div>
 <div class="sect2" id="language.operators.assignment.other">
  <h3 class="title">Другие операторы присваивания</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Пример</th>
      <th>Эквивалент</th>
      <th>Операция</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a .= $b</td>
      <td>$a = $a . $b</td>
      <td>Конкатенация строк</td>
     </tr>

     <tr>
      <td>$a ??= $b</td>
      <td>$a = $a ?? $b</td>
      <td>Объединение с Null</td>
     </tr>

    </tbody>
   
  </table>

 </div>
 <div class="sect2" id="language.operators.assignment.see-also">
  <h3 class="title">Смотрите также</h3>
  <p class="para">
   <ul class="simplelist">
    <li><a href="language.operators.arithmetic.php" class="link">Арифметические операторы</a></li>
    <li><a href="language.operators.bitwise.php" class="link">Побитовые операторы</a></li>
    <li><a href="language.operators.comparison.php#language.operators.comparison.coalesce" class="link">Операторы объединения с null</a></li>
   </ul>
  </p>
 </div>
</div><?php manual_footer($setup); ?>