Нереференция PHP - PullRequest
       1

Нереференция PHP

3 голосов
/ 09 февраля 2011

Допустим, у меня есть этот код:

$val = 1;
$arr = Array();
$arr['val'] =& $val;
$val = 2;
echo $arr['val'];

Это выведет 2, потому что $ val был передан в $ arr по ссылке.

Мой вопрос: если я передал значение в массив по ссылке, есть ли способ удалить эту ссылку позже, сделав ее простым скопированным значением? Чтобы было понятнее, хотелось бы что-то вроде этого:

$val = 1;
$arr = Array();
$arr['val'] =& $val;

$arr['val'] = clone $arr['val']; 
// Or better yet:
$arr = clone $arr;

$val = 2;
echo $arr['val'];

И это должно вывести 1 (потому что массив был клонирован до того, как указанная переменная изменилась). Однако клон не работает с массивами, он работает только с объектами.

Есть идеи? Я действительно понятия не имею, как это сделать. Я пытался написать функцию рекурсивного копирования, но это не сработало.

1 Ответ

4 голосов
/ 09 февраля 2011

Вы можете unset индекс, а затем переназначить побочное значение вместо ссылки.

unset($arr['val']);
$arr['val'] = $val;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...