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

Значением выражения присваивания является присвоенное значение. То есть значение " $a = 3" равно 3. Это позволяет делать некоторые хитрые вещи:

<?php

$a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.

?>

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

<?php

$a = 3;
$a += 5; // sets $a to 8, as if we had said: $a = $a + 5;
$b = "Hello ";
$b .= "There!"; // sets $b to "Hello There!", just like $b = $b . "There!";

?>

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

Исключением из обычного поведения присвоения по значению в PHP является объект s, который назначается по ссылке. Объекты могут быть явно скопированы с помощью ключевого слова clone .

Назначение по ссылке

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

Пример #1 Назначение по ссылке

<?php
$a = 3;
$b = &$a; // $b is a reference to $a

print "$a\n"; // prints 3
print "$b\n"; // prints 3

$a = 4; // change $a

print "$a\n"; // prints 4
print "$b\n"; // prints 4 as well, since $b is a reference to $a, which has
              // been changed
?>

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

<?php
class C {}

$o = &new C;
?>

Приведенный выше пример выведет:

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданное «новое» (T_NEW) в…