1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-23 23:12:09 +01:00
Files
archived-doc-es/language/operators/assignment.xml
2025-05-06 21:45:14 +02:00

261 lines
7.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 16934048f79c6e117cd16a23c09c1b2ea502e284 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.operators.assignment">
<title>Los operadores de asignación</title>
<titleabbrev>Asignación</titleabbrev>
<simpara>
El operador de asignación más simple es el signo "=".
El primer reflejo es pensar que este signo significa
"igual a". 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.
</simpara>
<para>
El valor de una expresión de asignación es el valor
asignado. Por ejemplo, el valor de la expresión
'<literal>$a = 3</literal>' es el valor 3. Esto permite utilizar
trucos tales como:
<example>
<title>Asignaciones anidadas</title>
<programlisting role="php">
<![CDATA[
<?php
$a = ($b = 4) + 5;
// $a ahora es igual a 9, y $b vale 4.
var_dump($a);
?>
]]>
</programlisting>
</example>
</para>
<para>
Además del simple operador de asignación, existen
"operadores combinados" para todos los operadores
<link linkend="language.operators">aritméticos</link>,
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:
<example>
<title>Asignaciones Combinadas</title>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$a += 5; // asigna el valor 8 a la variable $a corresponde a la instrucción '$a = $a + 5';
$b = "Hola ";
$b .= " a todos!"; // asigna el valor "Hola a todos!" a
// la variable $b
// idéntico a $b = $b." a todos!";
var_dump($a, $b);
?>
]]>
</programlisting>
</example>
</para>
<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.
</para>
<para>
Una excepción al comportamiento de asignación por valor en PHP es el tipo
<type>object</type>, estos son asignados por referencia.
La copia de objeto debe ser explícitamente solicitada gracias al mot-clé
<link linkend="language.oop5.cloning">clone</link>.
</para>
<sect2 xml:id="language.operators.assignment.reference">
<title>Asignación por referencia</title>
<para>
La asignación por referencia también es soportada, mediante la sintaxis
"<computeroutput>$var = &amp;$othervar;</computeroutput>". La asignación por
referencia significa que las dos variables apuntan al mismo contenedor de
datos, nada es copiado en ningún lugar.
</para>
<para>
<example>
<title>Asignación por referencia</title>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$b = &$a; // $b es una referencia a $a
print "$a\n"; // muestra 3
print "$b\n"; // muestra 3
$a = 4; // cambia $a
print "$a\n"; // muestra 4
print "$b\n"; // muestra 4 también, porque $b es una referencia a $a, que ha sido
// cambiada
?>
]]>
</programlisting>
</example>
</para>
<para>
El operador <link linkend="language.oop5.basic.new">new</link>
devuelve una referencia automáticamente, por lo tanto, asignar el resultado de
<link linkend="language.oop5.basic.new">new</link> por referencia es un error
</para>
<para>
<example>
<title>Nuevo operador por referencia</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>
Más información sobre las referencias y sus usos posibles pueden ser
encontrados en la sección del manual <link linkend="language.references">Las referencias
explicadas</link>.
</para>
</sect2>
<sect2 xml:id="language.operators.assignment.arithmetic">
<title>Los operadores de asignación aritméticos</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Ejemplo</entry>
<entry>Equivalente</entry>
<entry>Operación</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a += $b</entry>
<entry>$a = $a + $b</entry>
<entry>Adición</entry>
</row>
<row>
<entry>$a -= $b</entry>
<entry>$a = $a - $b</entry>
<entry>Sustracción</entry>
</row>
<row>
<entry>$a *= $b</entry>
<entry>$a = $a * $b</entry>
<entry>Multiplicación</entry>
</row>
<row>
<entry>$a /= $b</entry>
<entry>$a = $a / $b</entry>
<entry>División</entry>
</row>
<row>
<entry>$a %= $b</entry>
<entry>$a = $a % $b</entry>
<entry>Módulo</entry>
</row>
<row>
<entry>$a **= $b</entry>
<entry>$a = $a ** $b</entry>
<entry>Exponenciación</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 xml:id="language.operators.assignment.bitwise">
<title>Operadores de asignación bits a bits</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Ejemplo</entry>
<entry>Equivalente</entry>
<entry>Operación</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a &amp;= $b</entry>
<entry>$a = $a &amp; $b</entry>
<entry>Operador And</entry>
</row>
<row>
<entry>$a |= $b</entry>
<entry>$a = $a | $b</entry>
<entry>Operador Or</entry>
</row>
<row>
<entry>$a ^= $b</entry>
<entry>$a = $a ^ $b</entry>
<entry>Operador Xor</entry>
</row>
<row>
<entry>$a &lt;&lt;= $b</entry>
<entry>$a = $a &lt;&lt; $b</entry>
<entry>Desplazamiento a la izquierda</entry>
</row>
<row>
<entry>$a &gt;&gt;= $b</entry>
<entry>$a = $a &gt;&gt; $b</entry>
<entry>Desplazamiento a la derecha</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 xml:id="language.operators.assignment.other">
<title>Otros operadores de asignación</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Ejemplo</entry>
<entry>Equivalente</entry>
<entry>Operación</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a .= $b</entry>
<entry>$a = $a . $b</entry>
<entry>Concatenación de un string</entry>
</row>
<row>
<entry>$a ??= $b</entry>
<entry>$a = $a ?? $b</entry>
<entry>Operador de coalescencia nul</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">los operadores aritméticos</link></member>
<member><link linkend="language.operators.bitwise">los operadores bits a bits</link></member>
<member><link linkend="language.operators.comparison.coalesce">los operadores de coalescencia nul</link></member>
</simplelist>
</para>
</sect2>
</sect1>