Референции в 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;
?>