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 похож на новую переменную с новым значением. Начать новую жизнь.


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

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

ответ @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";