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:

<?php

$a
= ($b = 4) + 5; // Ahora $a es igual a 9 y $b se ha establecido en 4.

?>

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:

<?php

$a
= 3;
$a += 5; // Establece $a en 8, como si se hubiera dicho: $a = $a + 5;
$b = "Hola ";
$b .= "ahí!"; // establece $b en "Hola ahí!", al igual que $b = $b . "ahí!";

?>

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.

<?php
class C {}

$o = &new C;
?>

El resultado del ejemplo sería:

Parse error: syntax error, unexpected 'new' (T_NEW) in …

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

Ejemplo Equivalencia Operación
$a += $b $a = $a + $b Adición
$a -= $b $a = $a - $b Sustracción
$a *= $b $a = $a * $b Multiplicación
$a /= $b $a = $a / $b División
$a %= $b $a = $a % $b Módulo
$a **= $b $a = $a ** $b Exponenciación

Operadores de Asignación bit a bit

Ejemplo Equivalencia Operación
$a &= $b $a = $a & $b And bit a bit
$a |= $b $a = $a | $b Or bit a bit
$a ^= $b $a = $a ^ $b Xor bit a bit
$a <<= $b $a = $a << $b Desplazamiento a la izquierda
$a >>= $b $a = $a >> $b Desplazamiento a la derecha

Otros Operadores de Asignación

Ejemplo Equivalencia Operación
$a .= $b $a = $a . $b Concatenación de Strings
$a ??= $b $a = $a ?? $b Coalescencia de nulos