Еще раз о переменных ссылках...

zarus

Хитрожопый макак
Еще раз о переменных ссылках...

Прочитал о механизмах формирования ссылок. Попробовал такой вариант:
PHP:
$arr[0] = '1'; $arr[1] = '2'; $arr[2] = '3';
for ($i=0;$i<count($arr);$i++) {
  $somevar = &$arr[$i];
}
$arr2 = $arr;
$arr2[2] = '4';
Какое-то "неправильное" поведение...
Попробую схему привести, как это должно работать, а Вы поправьте - просто хочу понять, как это все происходит...
PHP:
1.$arr
       [1]--->('1')|ref=0,cnt=1|
                               |
[arr]  [2]--->('2')|ref=0,cnt=1|
                               |
       [3]--->('3')|ref=0,cnt=1|

2.$somevar = &$arr[1]
       [1]--->('1')|ref=1,cnt=1| <-|
                               |   |
[arr]  [2]--->('2')|ref=0,cnt=1|   |- [somevar]
                               |
       [3]--->('3')|ref=0,cnt=1|

3.$somevar = &$arr[2]
       [1]-|  ('1')|ref=1,cnt=1|
           |                   |
[arr]  [2]--->('2')|ref=1,cnt=3| <--- [somevar]
                               |
       [3]--->('3')|ref=0,cnt=1|

4.$somevar = &$arr[3]
       [1]-| x('1')|ref=1,cnt=1|
           |                   |
[arr]  [2]-- x('2')|ref=1,cnt=2|   |- [somevar]
           |                   |   |
       [3]--->('3')|ref=1,cnt=4| <-|
 

sage

Новичок
>Какое-то "неправильное" поведение...
В чём заключается то неправильное поведение?
 

SiMM

Новичок
PHP:
$arr = array(1,2,3);
var_dump($arr);
for ($i=0;$i<count($arr);$i++) {
  $somevar = &$arr[$i];
}
$arr2 = $arr;
$arr2[2] = 4;
var_dump($arr);
Код:
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
array(3) {
  [0]=>
  &int(1)
  [1]=>
  &int(2)
  [2]=>
  &int(4)
}
 

zarus

Хитрожопый макак
А ты попробуй скрипт запустить, и посмотри, какие данные изменяются в 1 и 2 массивах. Это не неправильное поведение - это для меня оно неправильное. Я хочу понять, как это происходит. Из статьи не смог понять.

-~{}~ 23.12.05 10:25:

2Симм, объясни, почему, мы в результате НЕ получаем весь массив, заполненный '4', хотя по идее после цикла, 0 и 1 элементы массива 1 должны ссылаться на элемент 2. Но они оказывается не ссылаются и не изменяются. В общем, я запутался.
Почему я этот вопрос поднял, потому что у меня такая проблема возникла.
 

sage

Новичок
> НЕ получаем весь массив, заполненный '4'
а почему мы его должны получать?
> 0 и 1 элементы массива 1 должны ссылаться на элемент 2?
Где ты так решил?
 

zarus

Хитрожопый макак
Автор оригинала: sage
> НЕ получаем весь массив, заполненный '4'
а почему мы его должны получать?
> 0 и 1 элементы массива 1 должны ссылаться на элемент 2?
Где ты так решил?
Это я так думаю, я сюда пришел спросить, как надо правильно думать, чтобы получить то, что получаем.
 
Сверху