Я понимаю, почему
$a = new ArrayObject();
$a['ID'] = 42;
$b = &$a['ID'];
$c = $a;
$c['ID'] = 37;
echo $a['ID']."\n";
echo $b."\n";
echo $c['ID']."\n";
выходы 37, 42, 37
а
$a = new ArrayObject();
$a['ID'] = 42;
$b = &$a['ID'];
$c = $a;
$b = 37;
echo $a['ID']."\n";
echo $b."\n";
echo $c['ID']."\n";
выходы 37, 37, 37
В обоих случаях $b
является ссылкой на $a['ID']
, а $c
является указателем на тот же объект, что и $a
.
Когда $b
изменяет $a['ID']
и $c['ID']
изменение, потому что назначение $b
изменяет значение, на которое ссылается $a['ID']
.
Когда $c['ID']
изменяется, новый int присваивается $a['ID']
, $b
больше не ссылается на $a['ID']
.
Но это меня мешает
$a = new ArrayObject();
$a['ID'] = 42;
$b = &$a['ID'];
$c = $a;
$c['ID'] &= 0;
$c['ID'] |= 37;
echo $a['ID']."\n";
echo $b."\n";
echo $c['ID']."\n";
(выходы 37, 37, 37)
Это определенное поведение? Я ничего не видел об этом в документации...