Поможет ли копирование при записи предотвратить дублирование данных в массивах?

Я программирую клиента PHP API на PHP, который анализирует данные CSV в ассоциативные массивы, и я хочу защитить своих пользователей от дублирования данных при использовании этих массивов.

Мои пользователи никогда не будут писать в эти массивы (теоретически они могли бы, но на практике это не имеет смысла).

Теперь мой вопрос: если мои пользователи передадут эти массивы в качестве аргументов методам, будет ли механизм копирования и записи в PHP предотвращать дублирование данных или любой метод, который явно не принимает ссылку на массив, получит полную копию из массива?

2 ответа

Решение

Копировать при записи, как следует из названия, означает, что ни одна переменная не копируется до тех пор, пока что-то не будет записано; до тех пор, пока в передаваемой переменной не будет изменено ни одного байта, PHP позаботится о том, чтобы избежать ненужных дубликатов автоматически и без необходимости использования явных ссылок благодаря этому механизму.

В этой статье подробно объясняется, как это реализовано в исходном коде PHP, и, как показано в статье, с помощью xdebug можно легко проверить, что переменные не дублируются функцией xdebug_debug_zval.

Кроме того, этот ответ здесь, на SO, имеет больше на Copy-on-Write.

Если вы не измените их, массивы не будут скопированы.

Другие вопросы по тегам