PHP удаляет "ссылку" из переменной.

У меня есть код ниже. Я хочу изменить $b, чтобы снова использовать его со значениями. Если я это сделаю, он также изменит значение $a. Как я могу присвоить значение $b снова после того, как ранее назначил его ссылкой на $a?

$a = 1;
$b = &$a;

// later
$b = null;

Ответ 1

См. пояснение inline

$a = 1;
$b = &$a; Теперь $b и $a становятся одной и той же переменной с двумя разными именами
unset($b); $b имя исчезло, исчезло из контекста Но $a все еще доступен
$b = 2; Теперь $b - это как новая переменная с новым значением. Запуск новой жизни.

Ответ 2

$a = 1;
$b = &$a;

unset($b);
// later
$b = null;

Ответ 3

Ответ @xdazz правильный, но просто добавьте следующий отличный пример из PHP Manual, в котором дается представление о том, что такое PHP. делая под капотом.

В этом примере вы можете видеть, что $bar внутри функции foo() является статической ссылкой на переменную области функции.

Отмена $bar удаляет ссылку, но не освобождает память:

<?php
function foo()
{
    static $bar;
    $bar++;
    echo "Before unset: $bar, ";
    unset($bar);
    $bar = 23;
    echo "after unset: $bar\n";
}

foo();
foo();
foo();
?>

Вышеприведенный пример выводит:

Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23

Ответ 4

Прежде всего: создание ссылки от $a до $b создает соединение (из-за отсутствия лучшего слова) между двумя переменными, поэтому изменение $a при изменении $b происходит именно так, как это делается предназначен для работы.

Итак, если вы хотите нарушить ссылку, самый простой способ ist

unset($b);
$b="new value";