Оператор присваивания
Базовый оператор присваивания обозначается как "=". На первый взгляд может показаться, что это оператор "равно". На самом деле это не так. В действительности оператор присваивания означает, что левый операнд получает значение правого выражения, (то есть устанавливается значением).
Результатом выполнения оператора присваивания является само присвоенное значение.
Таким образом, результат выполнения "$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 C {}
$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 |