Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Странности со ссылками на переменные
Покинул форум
Сообщений всего: 56
Дата рег-ции: Авг. 2017 Откуда: замкадье
Помог: 1 раз(а)
Новичком себя назвать не могу, но подходящего раздела не нашел, поэтому спрошу тут:
Есть массив, суть значений не важна, ну пусть для простоты будет 0,1,2 Вырезаю из этого массива кусок функцией array_slice(), теперь это мой кусок, и я могу в нем делать все, что хочу, на исходный массив это повлиять не должно. Ну пусть для простоты кусок будет всем массивом.
т.е. я изменил что-то в своей копии, и исходного массива это не коснулось. А теперь подлянка - кто-то сдалал переменную-ссылку на элемент исходного массива. Теперь все стало не так:
Т.е. теперь значение поменялось в обоих массивах, хотя я не просил делать никаких ссылок. Это я что-то недопонимаю или ошибка в PHP?
Ch_chov
Отправлено: 11 Августа, 2017 - 14:36:09
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
Думаю, array_slice делает shallow copy, копирует данные вместе ссылками. Тоже самое происходит при клонировании объектов которые включаются в себя другие объекты. Даже clone $object не помогает.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.