PHP удалить «ссылку» из переменной. - PullRequest
11 голосов
/ 27 января 2012

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

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

// later
$b = null;

Ответы [ 4 ]

13 голосов
/ 27 января 2012

См. Объяснение в строке

$a = 1;    // Initialize it
$b = &$a;  // Now $b and $a becomes same variable with just 2 different names  
unset($b); // $b name is gone, vanished from the context  But $a is still available  
$b = 2;    // Now $b is just like a new variable with a new value. Starting new life.
7 голосов
/ 27 января 2012
$a = 1;
$b = &$a;

unset($b);
// later
$b = null;
5 голосов
/ 27 января 2012

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

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

Unsetting $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
3 голосов
/ 27 января 2012

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

Итак, если вы хотите разорвать ссылку, самый простой способ - это

unset($b);
$b="new value";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...