Mám nižšie uvedený kód. Chcem zmeniť $ b, aby som ho znova použil s hodnotami. Ak tak urobím, zmení sa tiež $ a. Ako môžem priradiť hodnotu $ b znova po tom, čo som ju predtým priradil ako odkaz na $ a?
$a = 1;
$b = &$a;
// later
$b = null;
odpovede:
12 pre odpoveď č. 1Viď vysvetlenie nižšie
$a = 1;
$b = &$a;
Teraz sa $ b a $ a stávajú rovnakou premennou len s 2 rôznymi názvami
unset($b);
Názov $ b je preč, zmizol z kontextu. Ale $ a je stále k dispozícii
$b = 2;
Teraz je $ b ako nová premenná s novou hodnotou. Začína nový život.
7 pre odpoveď č. 2
$a = 1;
$b = &$a;
unset($b);
// later
$b = null;
5 pre odpoveď č. 3
Odpoveď používateľa @xdazz je správna, ale len na doplnenie nasledujúceho skvelého príkladu z PHP Manual ktorý poskytuje prehľad o tom, čo PHP robí pod kapotou.
Na tomto príklade to vidíte $bar
vo funkcii foo () je statický odkaz na premennú rozsahu funkcie.
odistenie $bar
odstráni referenciu, ale nevyvolá pamäť:
<?php
function foo()
{
static $bar;
$bar++;
echo "Before unset: $bar, ";
unset($bar);
$bar = 23;
echo "after unset: $barn";
}
foo();
foo();
foo();
?>
Vyššie uvedený príklad prináša:
Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23
3 pre odpoveď č. 4
Najskôr: Vytvorenie referencie z $a
na $b
vytvára spojenie (pre nedostatok lepšieho slova) medzi týmito dvoma premennými, takže $a
meniace sa kedy $b
zmeny sú presne tak, ako to má fungovať.
Takže, za predpokladu, že chcete referenciu prelomiť, je najjednoduchší spôsob
unset($b);
$b="new value";