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.
El valor de una expresión de asignación es el valor
asignado. Por ejemplo, el valor de la expresión
'$a = 3
' es el valor 3. Esto permite utilizar
trucos tales como:
Ejemplo #1 Asignaciones anidadas
<?php
$a = ($b = 4) + 5;
// $a ahora es igual a 9, y $b vale 4.
var_dump($a);
?>
Además del simple operador de asignación, existen "operadores combinados" para todos los operadores aritméticos, 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:
Ejemplo #2 Asignaciones Combinadas
<?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);
?>
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.
Una excepción al comportamiento de asignación por valor en PHP es el tipo object, estos son asignados por referencia. La copia de objeto debe ser explícitamente solicitada gracias al mot-clé clone.
La asignación por referencia también es soportada, mediante la sintaxis "$var = &$othervar;". La asignación por referencia significa que las dos variables apuntan al mismo contenedor de datos, nada es copiado en ningún lugar.
Ejemplo #3 Asignación por referencia
<?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
?>
El operador new devuelve una referencia automáticamente, por lo tanto, asignar el resultado de new por referencia es un error
Ejemplo #4 Nuevo operador por referencia
<?php
class C {}
$o = &new C;
?>
El resultado del ejemplo sería:
Parse error: syntax error, unexpected token ";", expecting "("
Más información sobre las referencias y sus usos posibles pueden ser encontrados en la sección del manual Las referencias explicadas.
Ejemplo | Equivalente | 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 |
Ejemplo | Equivalente | Operación |
---|---|---|
$a &= $b | $a = $a & $b | Operador And |
$a |= $b | $a = $a | $b | Operador Or |
$a ^= $b | $a = $a ^ $b | Operador Xor |
$a <<= $b | $a = $a << $b | Desplazamiento a la izquierda |
$a >>= $b | $a = $a >> $b | Desplazamiento a la derecha |
Ejemplo | Equivalente | Operación |
---|---|---|
$a .= $b | $a = $a . $b | Concatenación de un string |
$a ??= $b | $a = $a ?? $b | Operador de coalescencia nul |