Download the PHP library myclabs/deep-copy
On this page you can find all versions of the php package myclabs/deep-copy. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
All versions of deep-copy with dependencies
Informations about the package deep-copy
DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph.
Table of Contents
- Using simply
- Using simply
- Going further
- Property name
- Specific property
How do you create copies of your objects?
- How do you create deep copies of your objects (i.e. copying also all the objects referenced in the properties)?
__clone() and implement the behavior yourself.
- But how do you handle cycles in the association graph?
Now you're in for a big mess :(
DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it keeps a hash map of all instances and thus preserves the object graph.
To use it:
Alternatively, you can create your own
DeepCopy instance to configure it differently for example:
Or you may want to roll your own deep copy function:
You can add filters to customize the copy process by adding filters:
During the copy process, when a property is matched by a filter associated to this matcher is applied. By default, when a filter is applied this stops the process, i.e. the next matcher-filter pair will not be checked, unless the filter is implemented as a chainable filter.
Some generic filters and matchers are already provided.
Matcherapplies on a object attribute
TypeMatcherapplies on any element found in graph, including array elements
PropertyNameMatcher will match a property by its name:
PropertyMatcher will match a specific property of a specific class:
TypeMatcher will match any element by its type (instance of a class or any value that could be
Except a few exceptions (when the filter is a chainable filter like
DoctrineProxyFilter), matching a filter will stop the chain of filters (i.e. the next
ones will not be applied).
Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have any ID:
If you want a property to remain untouched (for example, an association to an object):
This filters allows to copy a Doctrine entity:
If you use Doctrine and want to copy an entity who contains a
Collection that you want to be reset, you can use this
If you use Doctrine and use cloning on lazy loaded entities, you might encounter errors mentioning missing fields on a Doctrine proxy class (...\__CG__\Proxy). You can use this filter to load the actual entity behind the Doctrine proxy class.
Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded before other filters are applied!
This filter won't stop the chain of filters (i.e. the next ones may be applied).
ReplaceFilter (type filter)
If you want to replace the value of a property:
- If you want to replace whole element:
ShallowCopyFilter (type filter)
Stop DeepCopy from recursively copying element, using standard
This package is distributed under the MIT license.
Running the tests is simple: