Referencje w PHP

W PHP można przypisać wartość jednej zmiennej do drugiej:

php<?php
  $num1 = 1;
  $num2 = $num1; // przypisujemy
  
  echo $num1; // 1
  echo $num2; // 1
?>

Przy takim przypisaniu do nowej zmiennej zapisywana jest kopia wartości pierwszej zmiennej. Oznacza to, że zmienne nie są w żaden sposób powiązane ze sobą i można je niezależnie modyfikować. Spójrz na przykładzie kodu:

php<?php
  $num1 = 1;
  $num2 = $num1;
  $num2 = 2;
  
  echo $num1; // 1 - nie zmieniło się
?>

Można jednak sprawić, aby kopiowana nie była wartość zmiennej, lecz referencja do niej. W tym przypadku przy zmianie wartości jednej zmiennej, będzie zmieniać się również wartość drugiej.

Aby przekazać wartość przez referencję, należy przed nazwą zmiennej postawić ampersand:

php<?php
  $num1 = 1;
  $num2 = &$num1; // przekazujemy przez referencję
?>

Teraz zmiana pierwszej zmiennej doprowadzi również do zmiany drugiej:

php<?php
  $num1 = 1;
  $num2 = &$num1;
  $num2 = 2;
  
  echo $num1; // 2 - zmieniło się
?>

Podobnie, jeśli zmienimy pierwszą zmienną, to zmieni się również druga:

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

Opowiedz, jaki będzie wynik wykonania kodu:

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

Opowiedz, jaki będzie wynik wykonania kodu:

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

Opowiedz, jaki będzie wynik wykonania kodu:

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

Opowiedz, jaki będzie wynik wykonania kodu:

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