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;
?>