2323 * @license GPL-2.0+
2424 * @author Jeroen De Dauw < [email protected] > 2525 */
26- class MapDiffer implements Differ, MapDifferInterface {
26+ class MapDiffer implements MapDifferInterface {
2727
2828 /**
2929 * @var bool
@@ -33,30 +33,34 @@ class MapDiffer implements Differ, MapDifferInterface {
3333 /**
3434 * @var Differ
3535 */
36- private $ listDiffer ;
36+ private $ elementDiffer ;
3737
3838 /**
3939 * @var ValueComparer
4040 */
4141 private $ valueComparer ;
4242
4343 /**
44- * Create differ for recursive diffs
44+ * The third argument ($comparer) was added in 3.0
4545 */
46- public static function createRecursive ( ValueComparer $ comparer = null , Differ $ listDiffer = null ) {
47- $ differ = new self ( true , null , $ comparer );
48- $ differ ->listDiffer = $ listDiffer ?? $ differ ;
46+ public function __construct ( bool $ recursively = false , Differ $ elementDiffer = null ,
47+ ValueComparer $ comparer = null ) {
4948
50- return $ differ ;
49+ $ this ->recursively = $ recursively ;
50+ $ this ->elementDiffer = $ elementDiffer ?? new ListDiffer ();
51+ $ this ->valueComparer = $ comparer ?? new StrictComparer ();
5152 }
5253
5354 /**
54- * The third argument ($comparer) was added in 3.0
55+ * Creates a recursive MapDiffer that by default uses itself to diff elements recursively
56+ *
57+ * @since 3.2
5558 */
56- public function __construct ( bool $ recursively = false , Differ $ listDiffer = null , ValueComparer $ comparer = null ) {
57- $ this ->recursively = $ recursively ;
58- $ this ->listDiffer = $ listDiffer ?? new ListDiffer ();
59- $ this ->valueComparer = $ comparer ?? new StrictComparer ();
59+ public static function newRecursiveDiffer ( ValueComparer $ comparer = null , Differ $ elementDiffer = null ) {
60+ $ differ = new self ( true , null , $ comparer );
61+ $ differ ->elementDiffer = $ elementDiffer ?? $ differ ;
62+
63+ return $ differ ;
6064 }
6165
6266 /**
@@ -144,7 +148,10 @@ private function getDiffForArrays( array $old, array $new ): Diff {
144148 return new Diff ( $ this ->doDiff ( $ old , $ new ), true );
145149 }
146150
147- return new Diff ( $ this ->listDiffer ->doDiff ( $ old , $ new ), $ this ->listDiffer instanceof MapDifferInterface );
151+ return new Diff (
152+ $ this ->elementDiffer ->doDiff ( $ old , $ new ),
153+ $ this ->elementDiffer instanceof MapDifferInterface
154+ );
148155 }
149156
150157 /**
0 commit comments