<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.operators.assignment.php',
    1 => 'Asignaci&oacute;n',
    2 => 'Los operadores de asignaci&oacute;n',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Los operadores',
  ),
  'prev' => 
  array (
    0 => 'language.operators.increment.php',
    1 => 'Incremento y decremento',
  ),
  'next' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Bitwise',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Los operadores de asignación</h2>
 
 <p class="simpara">
  El operador de asignación más simple es el signo &quot;=&quot;.
  El primer reflejo es pensar que este signo significa
  &quot;igual a&quot;. No es el caso. Significa que
  el operando de la izquierda se ve asignado el valor de
  la expresión que está a la derecha del signo igual.
 </p>
 <p class="para">
  El valor de una expresión de asignación es el valor
  asignado. Por ejemplo, el valor de la expresión
  &#039;<code class="literal">$a = 3</code>&#039; es el valor 3. Esto permite utilizar
  trucos tales como:
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Asignaciones anidadas</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">;<br /></span><span style="color: #FF8000">// $a ahora es igual a 9, y $b vale 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">
  Además del simple operador de asignación, existen
  &quot;operadores combinados&quot; para todos los operadores
  <a href="language.operators.php" class="link">aritméticos</a>,
  la unión de arrays y para los operadores sobre los strings.
  Esto permite utilizar el valor de una variable en una expresión y
  asignar el resultado de esta expresión a esta variable.
  Por ejemplo:
  <div class="example" id="example-2">
   <p><strong>Ejemplo #2 Asignaciones 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">// asigna el valor 8 a la variable $a corresponde a la instrucción '$a = $a + 5';<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #DD0000">"Hola "</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">.= </span><span style="color: #DD0000">" a todos!"</span><span style="color: #007700">;  </span><span style="color: #FF8000">// asigna el valor "Hola a todos!" a<br />                          //  la variable $b<br />                          //  idéntico a $b = $b." a todos!";<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">
  Se puede observar que la asignación copia el contenido de la variable original
  en la nueva variable (asignación por valor), lo que hace que los
  cambios de valor de una variable no modificarán el valor de
  la otra. Esto puede ser importante al copiar un gran array
  durante un bucle.
 </p>
 <p class="para">
  Una excepción al comportamiento de asignación por valor en PHP es el tipo
  <span class="type"><a href="language.types.object.php" class="type object">object</a></span>, estos son asignados por referencia.
  La copia de objeto debe ser explícitamente solicitada gracias al mot-clé
  <a href="language.oop5.cloning.php" class="link">clone</a>.
 </p>

 <div class="sect2" id="language.operators.assignment.reference">
  <h3 class="title">Asignación por referencia</h3>
  <p class="para">
   La asignación por referencia también es soportada, mediante la sintaxis
   &quot;<span class="computeroutput">$var = &amp;$othervar;</span>&quot;. La asignación por
   referencia significa que las dos variables apuntan al mismo contenedor de
   datos, nada es copiado en ningún lugar.
  </p>
  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 Asignación por referencia</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 es una referencia a $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">// muestra 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">// muestra 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">// cambia $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">// muestra 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">// muestra 4 también, porque $b es una referencia a $a, que ha sido<br />              // cambiada<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   El operador <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a>
   devuelve una referencia automáticamente, por lo tanto, asignar el resultado de
   <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a> por referencia es un error
  </p>
  <p class="para">
   <div class="example" id="example-4">
    <p><strong>Ejemplo #4 Nuevo operador por referencia</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>El ejemplo anterior mostrará:</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">
   Más información sobre las referencias y sus usos posibles pueden ser
   encontrados en la sección del manual <a href="language.references.php" class="link">Las referencias
   explicadas</a>.
  </p>
 </div>

 <div class="sect2" id="language.operators.assignment.arithmetic">
  <h3 class="title">Los operadores de asignación aritméticos</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Ejemplo</th>
      <th>Equivalente</th>
      <th>Operación</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a += $b</td>
      <td>$a = $a + $b</td>
      <td>Adición</td>
     </tr>

     <tr>
      <td>$a -= $b</td>
      <td>$a = $a - $b</td>
      <td>Sustracción</td>
     </tr>

     <tr>
      <td>$a *= $b</td>
      <td>$a = $a * $b</td>
      <td>Multiplicación</td>
     </tr>

     <tr>
      <td>$a /= $b</td>
      <td>$a = $a / $b</td>
      <td>División</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>Exponenciación</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.bitwise">
  <h3 class="title">Operadores de asignación bits a bits</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Ejemplo</th>
      <th>Equivalente</th>
      <th>Operación</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a &amp;= $b</td>
      <td>$a = $a &amp; $b</td>
      <td>Operador And</td>
     </tr>

     <tr>
      <td>$a |= $b</td>
      <td>$a = $a | $b</td>
      <td>Operador Or</td>
     </tr>

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

     <tr>
      <td>$a &lt;&lt;= $b</td>
      <td>$a = $a &lt;&lt; $b</td>
      <td>Desplazamiento a la izquierda</td>
     </tr>

     <tr>
      <td>$a &gt;&gt;= $b</td>
      <td>$a = $a &gt;&gt; $b</td>
      <td>Desplazamiento a la derecha</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.other">
  <h3 class="title">Otros operadores de asignación</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Ejemplo</th>
      <th>Equivalente</th>
      <th>Operación</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a .= $b</td>
      <td>$a = $a . $b</td>
      <td>Concatenación de un string</td>
     </tr>

     <tr>
      <td>$a ??= $b</td>
      <td>$a = $a ?? $b</td>
      <td>Operador de coalescencia nul</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.see-also">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><a href="language.operators.arithmetic.php" class="link">los operadores aritméticos</a></li>
    <li><a href="language.operators.bitwise.php" class="link">los operadores bits a bits</a></li>
    <li><a href="language.operators.comparison.php#language.operators.comparison.coalesce" class="link">los operadores de coalescencia nul</a></li>
   </ul>
  </p>
 </div>
</div><?php manual_footer($setup); ?>