PHP удаляет "ссылку" из переменной.
У меня есть ниже код. Я хочу изменить $b, чтобы использовать его снова со значениями. Если я это сделаю, это также изменит $a. Как я могу назначить значение $b снова после того, как ранее назначил его в качестве ссылки на $a?
$a = 1;
$b = &$a;
// later
$b = null;
4 ответов
см. объяснение inline
$a = 1;
$b = &$a;
теперь $b и $a становятся одной переменной с двумя разными именамиunset($b);
$B имя исчезло, исчезло из контекста, но $a все еще доступен$b = 2;
Теперь $b похож на новую переменную с новым значением. Начать новую жизнь.
ответ @xdazz правильный, но просто добавить следующий отличный пример из руководство по PHP что дает представление о том, что 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
прежде всего: создание ссылки из $a
to $b
создать подключение (за неимением лучшего слова) между двумя переменными, так $a
изменение когда $b
изменения-это именно то, как он должен работать.
Итак, предполагая, что вы хотите сломать ссылку, самый простой способ ist
unset($b);
$b="new value";