Ссылки в PHP

В PHP можно присвоить значение одной переменной в другую:

php<?php
  $num1 = 1;
  $num2 = $num1; // присваиваем
  
  echo $num1; // 1
  echo $num2; // 1
?>

При таком присваивании в новую переменную записываеся копия значения первой переменной. Это значит, что переменные никак не связаны друг с другом и их можно независимо изменять. Смотрите на примере кода:

php<?php
  $num1 = 1;
  $num2 = $num1;
  $num2 = 2;
  
  echo $num1; // 1 - не изменилось
?>

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

Для того, чтобы передать значение по ссылке, нужно перед именем переменной поставить амперсанд:

php<?php
  $num1 = 1;
  $num2 = &$num1; // передаем по ссылке
?>

Теперь изменение первой переменной приведет и к изменению второй:

php<?php
  $num1 = 1;
  $num2 = &$num1;
  $num2 = 2;
  
  echo $num1; // 2 - изменилось
?>

Аналогично, если мы поменяем первую переменную, то изменится и вторая:

php<?php
  $num1 = 1;
  $num2 = &$num1;
  $num1 = 2;
  
  echo $num2; // 2
?>
Задание 1

Расскажите, каким будет результат выполнения кода:

php<?php
  $num1 = 1;
  $num2 = $num1;
  $num2 = 2;
  
  echo $num1;
  echo $num2;
?>
Задание 2

Расскажите, каким будет результат выполнения кода:

php<?php
  $num1 = 1;
  $num2 = &$num1;
  $num2++;
  
  echo $num1;
  echo $num2;
?>
Задание 3

Расскажите, каким будет результат выполнения кода:

php<?php
  $num1 = 1;
  $num2 = $num1;
  
  $num1++;
  $num2++;
  
  echo $num1;
  echo $num2;
?>
Задание 4

Расскажите, каким будет результат выполнения кода:

php<?php
  $num1 = 1;
  $num2 = &$num1;
  
  $num1++;
  $num2++;
  
  echo $num1;
  echo $num2;
?>