Operadores de asignación
El operador básico de asignación es "=". Se podría inclinar a pensar
primero que es como un "igual a". No lo es. Realmente significa que el
operando de la izquierda se establece con el valor de la expresión de la
derecha (es decir, "se define como").
El valor de una expresión de asignación es el valor asignado. Es
decir, el valor de "$a = 3
" es de 3. Esto permite hacer algunas cosas
complicadas:
Además del operador básico de asignación, existen «operadores
combinados» para todos los de aritmética
binaria, unión de arrays y operadores de strings que permiten usar un valor en una
expresión y entonces establecer su valor como el resultado de esa expresión. Por
ejemplo:
Observe que la asignación copia la variable original en la nueva
(asignación por valor), por lo que los cambios en una no afectarán a la
otra. Esto también puede tener relevancia si se necesita copiar algo
como un gran array dentro de un bucle estrecho.
Una excepción al comportamiento usual de la asignación por valor en PHP ocurre
con objects los cuales son asignados por referencia.
Los objetos pueden ser explícitamente copiados por medio de la palabra clave
clone.
Asignación por referencia
La asignación por referencia también está soportada, utilizando la
sintaxis "$var = &$othervar;".
Asignación por referencia significa que ambas variables terminan apuntando a los
mismos datos y nada es copiado en ninguna parte.
Ejemplo #1 Asignación por referencia
<?php
$a = 3;
$b = &$a; // $b es una referencia para $a
print "$a\n"; // Imprime 3
print "$b\n"; // Imprime 3
$a = 4; // cambia $a
print "$a\n"; // Imprime 4
print "$b\n"; // Imprime 4 también, dado que $b es una referencia para $a, la cual ha
// sido cambiada
?>
El operador new
devuelve una referencia automáticamente, así que asignar el resultado de
new por referencia es un error.
Más información sobre referencias y sus usos potenciales se puede encontrar en
la sección del manual
Referencias Explicadas.
Operadores de Asignación Aritmética
Operadores de Asignación bit a bit
Otros Operadores de Asignación
Peter, Moscow ¶14 years ago
Using $text .= "additional text"; instead of $text = $text ."additional text"; can seriously enhance performance due to memory allocation efficiency.
I reduced execution time from 5 sec to .5 sec (10 times) by simply switching to the first pattern for a loop with 900 iterations over a string $text that reaches 800K by the end.
Robert Schneider ¶9 years ago
Be aware of assignments with conditionals. The assignment operator is stronger as 'and', 'or' and 'xor'.
<?php
$x = true and false; $y = (true and false); ?>
Hayley Watson ¶17 years ago
bradlis7 at bradlis7 dot com's description is a bit confusing. Here it is rephrased.
<?php
$a = 'a';
$b = 'b';
$a .= $b .= "foo";
echo $a,"\n",$b;?>
outputs
abfoo
bfoo
Because the assignment operators are right-associative and evaluate to the result of the assignment
<?php
$a .= $b .= "foo";
?>
is equivalent to
<?php
$a .= ($b .= "foo");
?>
and therefore
<?php
$b .= "foo";
$a .= $b;
?>
asc at putc dot de ¶9 years ago
PHP uses a temporary variable for combined assign-operators (unlike JavaScript), therefore the left-hand-side (target) gets evaluated last.
Input:
$a += $b + $c;
Meaning:
$a = ($b + $c) + $a;
Not:
$a = $a + ($b + $c);
This can be important if the target gets modified inside the expression.
$a = 0;
$a += (++$a) + (++$a); // yields 5 (instead of 4)