Viittaukset PHP:ssä
PHP:ssä voit antaa yhden muuttujan arvon toiselle:
<?php
$num1 = 1;
$num2 = $num1; // annetaan
echo $num1; // 1
echo $num2; // 1
?>
Tällaisessa osoituksessa uuteen muuttujaan kirjoitetaan ensimmäisen muuttujan arvon kopio. Tämä tarkoittaa, että muuttujat eivät ole millään tavalla yhteydessä toisiinsa ja niitä voidaan muuttaa itsenäisesti. Katso esimerkkikoodia:
<?php
$num1 = 1;
$num2 = $num1;
$num2 = 2;
echo $num1; // 1 - ei muuttunut
?>
Voidaan kuitenkin tehdä niin, että ei kopioida muuttujan arvoa, vaan viittaus siihen. Tässä tapauksessa kun yhden muuttujan arvoa muutetaan, myös toisen muuttujan arvo muuttuu.
Jotta arvo voidaan siirtää viittauksena, muuttujan nimen eteen tulee laittaa et-merkki:
<?php
$num1 = 1;
$num2 = &$num1; // siirretään viittauksena
?>
Nyt ensimmäisen muuttujan muutos johtaa myös toisen muuttumiseen:
<?php
$num1 = 1;
$num2 = &$num1;
$num2 = 2;
echo $num1; // 2 - muuttui
?>
Vastaavasti, jos muutamme ensimmäistä muuttujaa, niin toinenkin muuttuu:
<?php
$num1 = 1;
$num2 = &$num1;
$num1 = 2;
echo $num2; // 2
?>
Kerro, mikä on koodin suorituksen tulos:
<?php
$num1 = 1;
$num2 = $num1;
$num2 = 2;
echo $num1;
echo $num2;
?>
Kerro, mikä on koodin suorituksen tulos:
<?php
$num1 = 1;
$num2 = &$num1;
$num2++;
echo $num1;
echo $num2;
?>
Kerro, mikä on koodin suorituksen tulos:
<?php
$num1 = 1;
$num2 = $num1;
$num1++;
$num2++;
echo $num1;
echo $num2;
?>
Kerro, mikä on koodin suorituksen tulos:
<?php
$num1 = 1;
$num2 = &$num1;
$num1++;
$num2++;
echo $num1;
echo $num2;
?>