/ / PHP odstráni „referenciu“ z premennej. - php, premenné, referencie

PHP odstrániť "odkaz" z premennej. php, premenné, odkaz

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ď č. 1

Viď 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";