Оператор присвоения
Базовый оператор присвоения обозначается как =. На первый взгляд может показаться, что это оператор "равно". На самом деле это не так. В действительности, оператор присвоения означает, что левый операнд получает значение правого выражения, (т.е. устанавливается результирующим значением).
Результатом выполнения оператора присвоения является само присвоенное значение. Таким образом, результат выполнения $a = 3 будет равен 3. Это позволяет использовать конструкции вида:
<?php
$a = ($b = 4) + 5; // результат: $a установлена значением 9, переменной $b присвоено 4.
?>
В дополнение к базовому оператору присвоения имеются "комбинированные операторы" для всех бинарных арифметических и строковых операций, которые позволяют использовать некоторое значение в выражении, а затем установить его как результат данного выражения. Например:
<?php
$a = 3;
$a += 5; // устанавливает $a значением 8, аналогично записи: $a = $a + 5;
$b = "Hello ";
$b .= "There!"; // устанавливает $b строкой "Hello There!", как и $b = $b . "There!";
?>
Обратите внимание, что присвоение копирует оригинальную переменную в новую (присвоение по значению), таким образом все последующие изменения одной из переменных на другой никак не отражаются. Начиная с PHP 4, также поддерживается присваивание по ссылке, используя синтаксис $var = &$othervar;, но в PHP 3 такая возможность отсутствует. 'Присвоение по ссылке' означает, что обе переменные указывают на одни и те же данные и никакого копирования не происходит. Для получения более полной информации об этой возможности, обратитесь к разделу документации Подробно об указателях.
Коментарии
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;
?>
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.
Be aware of assignments with conditionals. The assignment operator is stronger as 'and', 'or' and 'xor'.
<?php
$x = true and false; //$x will be true
$y = (true and false); //$y will be false
?>
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)