Download the PHP package myclabs/deep-copy without Composer

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.

Please rate this library. Is it a good library?

All versions of deep-copy with dependencies

Informations about the package deep-copy

DeepCopy

DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph.

Build Status Coverage Status Scrutinizer Quality Score Total Downloads

Table of Contents

  1. How
  2. Why
    1. Using simply clone
    2. Overridding __clone()
    3. With DeepCopy
  3. How it works
  4. Going further
    1. Matchers
      1. Property name
      2. Specific property
      3. Type
    2. Filters
      1. SetNullFilter
      2. KeepFilter
      3. DoctrineCollectionFilter
      4. DoctrineEmptyCollectionFilter
      5. DoctrineProxyFilter
      6. ReplaceFilter
      7. ShallowCopyFilter
  5. Edge cases
  6. Contributing
    1. Tests

How?

Install with Composer:

Use simply:

Why?

You use __clone() and implement the behavior yourself.

Now you're in for a big mess :(

Using simply clone

Overridding __clone()

With DeepCopy

How it works

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:

You may want to roll your own deep copy function:

Going further

You can add filters to customize the copy process.

The method to add a filter is DeepCopy\DeepCopy::addFilter($filter, $matcher), with $filter implementing DeepCopy\Filter\Filter and $matcher implementing DeepCopy\Matcher\Matcher.

We provide some generic filters and matchers.

Matchers

Property name

The PropertyNameMatcher will match a property by its name:

Specific property

The PropertyMatcher will match a specific property of a specific class:

Type

The TypeMatcher will match any element by its type (instance of a class or any value that could be parameter of gettype() function):

Filters

SetNullFilter (filter)

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:

KeepFilter (filter)

If you want a property to remain untouched (for example, an association to an object):

DoctrineCollectionFilter (filter)

If you use Doctrine and want to copy an entity, you will need to use the DoctrineCollectionFilter:

DoctrineEmptyCollectionFilter (filter)

If you use Doctrine and want to copy an entity who contains a Collection that you want to be reset, you can use the DoctrineEmptyCollectionFilter

DoctrineProxyFilter (filter)

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 the DoctrineProxyFilter 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!

ReplaceFilter (type filter)

  1. If you want to replace the value of a property:

  2. If you want to replace whole element:

The $callback parameter of the ReplaceFilter constructor accepts any PHP callable.

ShallowCopyFilter (type filter)

Stop DeepCopy from recursively copying element, using standard clone instead:

Edge cases

The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cloned and filters are not applied. There is two ways for you to handle them:

Contributing

DeepCopy is distributed under the MIT license.

Tests

Running the tests is simple:

Support

Get professional support via the Tidelift Subscription.


Version
Requires php Version ^7.1 || ^8.0

The package myclabs/deep-copy contains the following files

Loading the files please wait ....