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
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.
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; ?>