Lines Matching +full:add +full:- +full:matcher
5 [](https://travis-ci.org/mycl…
7 …ttps://scrutinizer-ci.com/g/myclabs/DeepCopy/badges/quality-score.png?s=2747100c19b275f93a777e3297…
8 …nloads](https://poser.pugx.org/myclabs/deep-copy/downloads.svg)](https://packagist.org/packages/my…
19 1. [Using simply `clone`](#using-simply-clone)
20 1. [Overridding `__clone()`](#overridding-__clone)
21 1. [With `DeepCopy`](#with-deepcopy)
22 1. [How it works](#how-it-works)
23 1. [Going further](#going-further)
25 1. [Property name](#property-name)
26 1. [Specific property](#specific-property)
29 1. [`SetNullFilter`](#setnullfilter-filter)
30 1. [`KeepFilter`](#keepfilter-filter)
31 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter-filter)
32 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter-filter)
33 1. [`DoctrineProxyFilter`](#doctrineproxyfilter-filter)
34 1. [`ReplaceFilter`](#replacefilter-type-filter)
35 1. [`ShallowCopyFilter`](#shallowcopyfilter-type-filter)
36 1. [Edge cases](#edge-cases)
46 composer require myclabs/deep-copy
55 $myCopy = $copier->copy($myObject);
61 - How do you create copies of your objects?
67 - How do you create **deep** copies of your objects (i.e. copying also all the objects referenced i…
72 - But how do you handle **cycles** in the association graph?
86 
91 
114 $copy = $copier->copy($var);
132 return $copier->copy($var);
139 You can add filters to customize the copy process.
141 The method to add a filter is `DeepCopy\DeepCopy::addFilter($filter, $matcher)`,
143 and `$matcher` implementing `DeepCopy\Matcher\Matcher`.
150 - `DeepCopy\Matcher` applies on a object attribute.
151 - `DeepCopy\TypeMatcher` applies on any element found in graph, including array elements.
159 use DeepCopy\Matcher\PropertyNameMatcher;
162 $matcher = new PropertyNameMatcher('id');
171 use DeepCopy\Matcher\PropertyMatcher;
174 $matcher = new PropertyMatcher('MyClass', 'id');
187 $matcher = new TypeMatcher('Doctrine\Common\Collections\Collection');
193 - `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher`
194 - `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher`
205 use DeepCopy\Matcher\PropertyNameMatcher;
208 echo $object->id; // 123
211 $copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id'));
213 $copy = $copier->copy($object);
215 echo $copy->id; // null
226 use DeepCopy\Matcher\PropertyMatcher;
229 $copier->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category'));
231 $copy = $copier->copy($object);
232 // $copy->category has not been touched
243 use DeepCopy\Matcher\PropertyTypeMatcher;
246 $copier->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collect…
248 $copy = $copier->copy($object);
260 use DeepCopy\Matcher\PropertyMatcher;
263 $copier->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty'…
265 $copy = $copier->copy($object);
267 // $copy->myProperty will return an empty collection
282 use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher;
285 $copier->addFilter(new DoctrineProxyFilter(), new DoctrineProxyMatcher());
287 $copy = $copier->copy($object);
300 use DeepCopy\Matcher\PropertyMatcher;
306 $copier->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title'));
308 $copy = $copier->copy($object);
310 // $copy->title will contain the data returned by the callback, e.g. 'The title (copy)'
324 $copier->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass'));
326 $copy = $copier->copy([new MyClass, 'some string', new MyClass]);
345 $this->deepCopy = new DeepCopy();
346 $this->deepCopy->addTypeFilter(
358 The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cl…
361 - Implement your own `__clone()` method
362 - Use a filter with a type matcher