Оператор присваивания

Базовый оператор присваивания обозначается как "=". На первый взгляд может показаться, что это оператор "равно". На самом деле это не так. В действительности оператор присваивания означает, что левый операнд получает значение правого выражения, (то есть устанавливается значением).

Результатом выполнения оператора присваивания является само присвоенное значение. Таким образом, результат выполнения "$a = 3" будет равен 3. Это позволяет делать трюки наподобие:

<?php

$a 
= ($b 4) + 5// $a теперь равно 9, а $b было присвоено 4.

?>

В дополнение к базовому оператору присваивания имеются "комбинированные операторы" для всех бинарных арифметических операций, операций объединения массивов и строковых операций, которые позволяют использовать некоторое значение в выражении, а затем установить его как результат данного выражения. Например:

<?php

$a 
3;
$a += 5// устанавливает $a в 8, как если бы мы написали: $a = $a + 5;
$b "Привет";
$b .= "-привет!"// устанавливает $b в "Привет-привет!",  как и $b = $b . "-привет!";

?>

Обратите внимание, что присвоение копирует оригинальную переменную в новую (присвоение по значению), таким образом все последующие изменения одной из переменных никак не отразятся на другой. Это также следует учитывать, если вам надо скопировать что-то типа большого массива в длинном цикле.

Исключением из обычного для PHP способа присваивания по значению являются объекты (object), которые присваиваются по ссылке. Принудительно скопировать объекты по значению можно с помощью специального ключевого слова clone.

Присваивание по ссылке

Присваивание по ссылке также поддерживается, для него используется синтаксис $var = &$othervar;. Присваивание по ссылке означает, что обе переменные указывают на одни и те же данные и никакого копирования не происходит.

Пример #1 Присваивание по ссылке

<?php
$a 
3;
$b = &$a// $b - это ссылка на $a

print "$a\n"// печатает 3
print "$b\n"// печатает 3

$a 4// меняем $a

print "$a\n"// печатает 4
print "$b\n"// также печатает 4, так как $b является ссылкой на $a,
              // а значение переменной $a успело измениться
?>

Оператор new автоматически возвращает ссылку, так как присвоение результата операции new по ссылке является ошибкой.

<?php
class {}

$o = &new C;
?>

Результат выполнения данного примера:

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

Для получения более полной информации о ссылках и их возможностях обратитесь к разделу Подробно о ссылках.

Операторы арифметического присваивания

Пример Эквивалент Операция
$a += $b $a = $a + b Сложение
$a -= $b $a = $a - $b Вычитание
$a *= $b $a = $a * $b Умножение
$a /= $b $a = $a / $b Деление
$a %= $b $a = $a % $b Модуль

Операторы побитового присваивания

Пример Эквивалент Операция
$a &= $b $a = $a & $b Побитовое И
$a |= $b $a = $a | $b Побитовое ИЛИ
$a ^= $b $a = $a ^ $b Побитовое исключающее ИЛИ (Xor)
$a <<= $b $a = $a << $b Побитовый сдвиг влево
$a >>= $b $a = $a >> $b Побитовый сдвиг вправо

Другие операторы присваивания

Пример Эквивалент Операция
$a .= $b $a = $a . $b Конкатенация строк
$a ??= $b $a = $a ?? $b Объединение с Null