У меня есть следующий код, который показывает, что PHP перезаписывает элементы массива объектов с последней итерацией объекта. Зачем это делать? Я хочу сохранить запись о том, что произошло с объектом, и я использую массив для этого. Посмотрите на результаты массива, когда я изменяю объект. Почему PHP это делает. Мне кажется, это может привести к серьезным ошибкам. Даже использование unset(), как рекомендовано другими, не работает. Это будет работать, только если я отключу объект ENTIRE. Но почему я хочу это сделать, если изменился только один элемент? Если у моего объекта есть 10 элементов и 1 изменение, мне нужно скопировать объект ENTIRE в массив. Причины не имеют значения, почему я должен это делать. Меня больше интересует, почему PHP имеет такое поведение. Это известная ошибка?PHP Перезаписывает элементы массива?
<?php
$server->server = 'c17d7ae1-c298-4a1d-b7ee-2a3c9a2ab14d';
$servers['test1'] = $server;
print_r($servers);
unset($server->server); // <----- WHY DOES THIS NOT WORK?
$server->server = 'f88043af-dcf6-4802-a3d7-91cb594da4b0';
$servers['test2'] = $server;
print_r($servers);
?>
РЕЗУЛЬТАТЫ:
PHP test.php
Array
(
[test1] => stdClass Object
(
[server] => c17d7ae1-c298-4a1d-b7ee-2a3c9a2ab14d
)
)
Array
(
[test1] => stdClass Object
(
[server] => f88043af-dcf6-4802-a3d7-91cb594da4b0 <--- This right here is WRONG
)
[test2] => stdClass Object
(
[server] => f88043af-dcf6-4802-a3d7-91cb594da4b0
)
)
"Даже при использовании снята с охраны() в соответствии с рекомендациями других" --- * рекомендованным другими за то, что *? – zerkms
Вы изменяете один и тот же объект, а затем задаетесь вопросом. Вы хотите второй объект - вы создаете второй объект. – zerkms