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