symfony/polyfill-deepclone

Symfony polyfill for the deepclone extension

Maintainers

👁 fabpot

Package info

github.com/symfony/polyfill-deepclone

Homepage

pkg:composer/symfony/polyfill-deepclone

Statistics

Installs: 1 365 942

Dependents: 5

Suggesters: 0

Stars: 6

v1.40.0 2026-06-12 07:27 UTC

Requires

  • php: >=8.1

Requires (Dev)

None

Suggests

Provides

Conflicts

None

Replaces

None

MIT dca4ccba5f360070b574414dce4c1e7a559844fa

compatibilityportablepolyfillshimdeepclone

This package is auto-updated.

Last update: 2026-06-12 07:29:07 UTC


README

This package provides a pure-PHP implementation of the functions and exception classes from the deepclone extension:

  • deepclone_to_array(mixed $value, ?array $allowed_classes = null, bool $allow_named_closures = false): array — converts any serializable PHP value graph into a pure array (only scalars and nested arrays, no objects).
  • deepclone_from_array(array $data, ?array $allowed_classes = null, bool $allow_named_closures = false): mixed — rebuilds the value graph from the array, preserving object identity, references, cycles, and private property state.
  • DeepClone\NotInstantiableException and DeepClone\ClassNotFoundException

When the native deepclone extension is loaded, this polyfill does nothing — the extension provides the same functions 4–5× faster.

The array representation preserves PHP's copy-on-write for strings and scalar arrays, making repeated cloning of a prototype significantly more memory efficient than unserialize(serialize()). It also serves as a cache-friendly serialization format: when dumped via var_export() into a .php file, OPcache maps the array into shared memory, making deserialization essentially free.

This is the same wire format used by Symfony's VarExporter\DeepCloner.

More information can be found in the main Polyfill README.

License

This library is released under the MIT license.