<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'language.operators.assignment.php',
    1 => 'Atribui&ccedil;&atilde;o',
    2 => 'Operadores de Atribui&ccedil;&atilde;o',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Operadores',
  ),
  'prev' => 
  array (
    0 => 'language.operators.increment.php',
    1 => 'Incremento e Decremento',
  ),
  'next' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Bin&aacute;rios',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Operadores de Atribuição</h2>
 
 <p class="simpara">
  O operador básico de atribuição é &quot;=&quot;. A primeira inclinação seria
  pensar nisto como &quot;é igual&quot;. Não é verdade. Isto quer dizer que o
  operando da esquerda recebe o valor da expressão da direita (ou seja,
  &quot;é definido para&quot;).
 </p>
 <p class="para">
  O valor de uma expressão de atribuição é o valor atribuído. Ou seja,
  o valor de &quot;<code class="literal">$a = 3</code>&quot; é 3. Isto permite alguns
  truques:
  <div class="example" id="example-1">
   <p><strong>Exemplo #1 Atribuições aninhadas</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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 é igual a 9 agora e $b foi definido como 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 /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Além do operador básico de atribuição, há &quot;operadores
  combinados&quot; para todos os <a href="language.operators.php" class="link">operadores
  aritméticos</a>, de array e string que permitem a você pegar um valor de uma
  expressão e então usar seu próprio valor para o resultado daquela expressão. Por
  exemplo:
  <div class="example" id="example-2">
   <p><strong>Exemplo #2 Atribuições combinadas</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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">// define $a para 8, como se disséssemos: $a = $a + 5;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #DD0000">"Bom "</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">.= </span><span style="color: #DD0000">"Dia!"</span><span style="color: #007700">; </span><span style="color: #FF8000">// define $b para "Bom Dia!", como em $b = $b . "Dia!";<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 /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Note que a atribuição copia a variável original para a nova
  (atribuição por valor), assim a mudança de uma não afeta a
  outra. Isto pode ser relevante se você precisa copiar algo
  como um grande array dentro de um loop apertado.
 </p>
 <p class="para">
  Uma exceção ao comportamento geral de atribuição ocorre
  com <span class="type"><a href="language.types.object.php" class="type object">object</a></span>s, que são atribuídos por referência.
  Objetos podem ser explicitamente copiados através da instrução <a href="language.oop5.cloning.php" class="link">clone</a>.
 </p>

 <div class="sect2" id="language.operators.assignment.reference">
  <h3 class="title">Atribuição por referência</h3>
  <p class="para">
   Atribuição por referência também é possível, utilizando-se a sintaxe
   &quot;<span class="computeroutput">$var = &amp;$othervar;</span>&quot;.
   A atribuição por referência significa que ambas as variáveis apontam
   para o mesmo dado, e nada é copiado.
  </p>
  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Exemplo #3 Atribuição por referência</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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 é uma referência de $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">// imprime 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">// imprime 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">// modificamos $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">// imprime 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">// imprime 4 também, pois $b é uma referência de $a, que foi<br />              // modificada<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   O operador <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a>
   retorna uma referência automaticamente, de forma que a atribuição de um resultado de
   <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a> por referência é um erro.
  </p>
  <p class="para">
   <div class="example" id="example-4">
    <p><strong>Exemplo #4 Operador new por referência</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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 /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>O exemplo acima produzirá:</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">
   Mais informações sobre referências e seus potenciais usos podem ser encontrados
   na seção <a href="language.references.php" class="link">Explicando Referências</a>
   do manual.
  </p>
 </div>

 <div class="sect2" id="language.operators.assignment.arithmetic">
  <h3 class="title">Arithmetic Assignment Operators</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Exemplo</th>
      <th>Equivalente</th>
      <th>Operação</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a += $b</td>
      <td>$a = $a + $b</td>
      <td>Adição</td>
     </tr>

     <tr>
      <td>$a -= $b</td>
      <td>$a = $a - $b</td>
      <td>Subtração</td>
     </tr>

     <tr>
      <td>$a *= $b</td>
      <td>$a = $a * $b</td>
      <td>Multiplicação</td>
     </tr>

     <tr>
      <td>$a /= $b</td>
      <td>$a = $a / $b</td>
      <td>Divisão</td>
     </tr>

     <tr>
      <td>$a %= $b</td>
      <td>$a = $a % $b</td>
      <td>Módulo</td>
     </tr>

     <tr>
      <td>$a **= $b</td>
      <td>$a = $a ** $b</td>
      <td>Exponentiation</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.bitwise">
  <h3 class="title">Operadores de bits</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Exemplo</th>
      <th>Equivalente</th>
      <th>Operação</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a &amp;= $b</td>
      <td>$a = $a &amp; $b</td>
      <td>Bitwise E</td>
     </tr>

     <tr>
      <td>$a |= $b</td>
      <td>$a = $a | $b</td>
      <td>Bitwise Ou</td>
     </tr>

     <tr>
      <td>$a ^= $b</td>
      <td>$a = $a ^ $b</td>
      <td>Bitwise Xor</td>
     </tr>

     <tr>
      <td>$a &lt;&lt;= $b</td>
      <td>$a = $a &lt;&lt; $b</td>
      <td>Desloca para esquerda</td>
     </tr>

     <tr>
      <td>$a &gt;&gt;= $b</td>
      <td>$a = $a &gt;&gt; $b</td>
      <td>Desloca para direita</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.other">
  <h3 class="title">Outras operações de assimilação</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Exemplo</th>
      <th>Equivalente</th>
      <th>Operação</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a .= $b</td>
      <td>$a = $a . $b</td>
      <td>Concatenação de strings</td>
     </tr>

     <tr>
      <td>$a ??= $b</td>
      <td>$a = $a ?? $b</td>
      <td>Aglutinação de nulls (null coalesce)</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.see-also">
  <h3 class="title">Veja Também</h3>
  <p class="para">
   <ul class="simplelist">
    <li><a href="language.operators.arithmetic.php" class="link">operadores aritméticos</a></li>
    <li><a href="language.operators.bitwise.php" class="link">operadores em bits</a></li>
    <li><a href="language.operators.comparison.php#language.operators.comparison.coalesce" class="link">operador de aglutinação de null</a></li>
   </ul>
  </p>
 </div>
</div><?php manual_footer($setup); ?>