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

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

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

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

Ответ 1

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

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

Дополнительно этот ответ здесь, на SO, больше на Copy-on-Write.

Ответ 2

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