diff --git a/src/Differ/MapDiffer.php b/src/Differ/MapDiffer.php index c3a0b94..074cddd 100644 --- a/src/Differ/MapDiffer.php +++ b/src/Differ/MapDiffer.php @@ -23,7 +23,7 @@ * @license GPL-2.0+ * @author Jeroen De Dauw < jeroendedauw@gmail.com > */ -class MapDiffer implements Differ { +class MapDiffer implements Differ, MapDifferInterface { /** * @var bool @@ -40,6 +40,16 @@ class MapDiffer implements Differ { */ private $valueComparer; + /** + * Create differ for recursive diffs + */ + public static function createRecursive( ValueComparer $comparer = null, Differ $listDiffer = null ) { + $differ = new self( true, null, $comparer ); + $differ->listDiffer = $listDiffer ?? $differ; + + return $differ; + } + /** * The third argument ($comparer) was added in 3.0 */ @@ -134,7 +144,7 @@ private function getDiffForArrays( array $old, array $new ): Diff { return new Diff( $this->doDiff( $old, $new ), true ); } - return new Diff( $this->listDiffer->doDiff( $old, $new ), false ); + return new Diff( $this->listDiffer->doDiff( $old, $new ), $this->listDiffer instanceof MapDifferInterface ); } /** diff --git a/src/Differ/MapDifferInterface.php b/src/Differ/MapDifferInterface.php new file mode 100644 index 0000000..9e745bf --- /dev/null +++ b/src/Differ/MapDifferInterface.php @@ -0,0 +1,16 @@ + + */ +interface MapDifferInterface { + +}