Я программирую веб-клиент API в PHP, который анализирует данные CSV в ассоциативных массивах, и я хочу защитить своих пользователей от дублирования данных при использовании этих массивов.
Мои пользователи никогда не будут писать эти массивы (теоретически они могут, но на практике это не имеет смысла).
Теперь мой вопрос: если мои пользователи передают эти массивы в качестве аргументов методам, будет ли механизм копирования на запись PHP блокировать дублирование данных или будет ли какой-либо метод, который явно не принимает ссылку на массив, получит полную копию из массива?
Скопировать на запись, поскольку название предполагает, что никакая переменная не копируется, пока что-то не написано; до тех пор, пока в переменной не будет изменен ни один байт, PHP позаботится о том, чтобы избежать ненужных дубликатов автоматически и без необходимости использования явных ссылок благодаря этому механизму.
В этой статье подробно объясняется, как это реализовано в исходном коде PHP, и, как следует из статьи, с помощью xdebug можно легко проверить, что переменные не дублируются с помощью функции xdebug_debug_zval.
Кроме того, этот ответ здесь, на SO, больше посвящен Copy-on-Write.
Если вы не измените их, массивы не будут скопированы.