Diff-Implementierung für PHP, berücksichtigt von Phpunit in eine eigenständige Komponente.
Sie können diese Bibliothek mit Composer als lokale Abhängigkeit pro Projekt zu Ihrem Projekt hinzufügen:
composer require sebastian/diff
Wenn Sie diese Bibliothek nur während der Entwicklung benötigen, zum Beispiel die Testsuite Ihres Projekts ausführen, sollten Sie sie als Abhängigkeit von Entwicklungszeiten hinzufügen:
composer require --dev sebastian/diff
Die Differ
Klasse kann verwendet werden, um eine Textdarstellung des Unterschieds zwischen zwei Zeichenfolgen zu erzeugen:
<? Php Declare (strict_types = 1); Verwenden Sie SebastianbergmannDiffDiffer; Verwenden Sie SebastianbergmannDiffoutputunifiedDiffoutputBuilder; drucken $ diff-> diff ('foo', 'bar');
Der obige Code ergibt die folgende Ausgabe:
--- Original +++ neu @@@@-Foo+Bar
Der im obige Beispiel verwendete UnifiedDiffOutputBuilder
erzeugt die Ausgabe im "Unified Diff" -Format und wird beispielsweise von Phpunit verwendet.
Der StrictUnifiedDiffOutputBuilder
erzeugt die Ausgabe im "Strict Unified Diff" -Format mit Hungern, ähnlich wie diff -u
und kompatibel mit patch
oder git apply
.
Der DiffOnlyOutputBuilder
erzeugt eine Ausgabe, die nur die unterschiedlichen Linien enthält, die sich unterscheiden.
Wenn keiner dieser drei Ausgabeberäer mit Ihrem Anwendungsfall übereinstimmt, können Sie DiffOutputBuilderInterface
implementieren, um eine benutzerdefinierte Ausgabe zu generieren.
Die Parser
-Klasse kann verwendet werden, um einen einheitlichen Diff in ein Objektdiagramm zu analysieren:
Verwenden Sie SebastianbergmannDiffparser; Verwenden Sie Sebastianbergmanngit; $ git = new git ('/usr/local/src/onds'); 'C07A373D2399F3E686234C4F7F088D635EB9641B');
Der obige Code ergibt die folgende Ausgabe:
Array ( [0] => SebastianBergmannDiffDiff Object ( [from:SebastianBergmannDiffDiff:private] => a/tests/MoneyTest.php [to:SebastianBergmannDiffDiff:private] => b/tests/MoneyTest.php [chunks:SebastianBergmannDiffDiff:private] => Array ( [0] => SebastianBergmannDiffChunk Object ( [start:SebastianBergmannDiffChunk:private] => 87 [startRange:SebastianBergmannDiffChunk:private] => 7 [end:SebastianBergmannDiffChunk:private] => 87 [endRange:SebastianBergmannDiffChunk:private] => 7 [lines:SebastianBergmannDiffChunk:private] => Array ( [0] => SebastianBergmannDiffLine Object ( [type:SebastianBergmannDiffLine:private] => 3 [content:SebastianBergmannDiffLine:private] => * @covers SebastianBergmannMoneyMoney::add ) [1] => SebastianBergmannDiffLine Object ( [type:SebastianBergmannDiffLine:private] => 3 [content:SebastianBergmannDiffLine:private] => * @covers SebastianBergmannMoneyMoney::newMoney ) [2] => SebastianBergmannDiffLine Object ( [type:SebastianBergmannDiffLine:private] => 3 [content:SebastianBergmannDiffLine:private] => */ ) [3] => SebastianBergmannDiffLine Object ( [type:SebastianBergmannDiffLine:private] => 2 [content:SebastianBergmannDiffLine:private] => public function testAnotherMoneyWithSameCurrencyObjectCanBeAdded() ) [4] => SebastianBergmannDiffLine Object ( [type:SebastianBergmannDiffLine:private] => 1 [content:SebastianBergmannDiffLine:private] => public function testAnotherMoneyObjectWithSameCurrencyCanBeAdded() ) [5] => SebastianBergmannDiffLine Object ( [type:SebastianBergmannDiffLine:private] => 3 [content:SebastianBergmannDiffLine:private] => { ) [6] => SebastianBergmannDiffLine Object ( [type:SebastianBergmannDiffLine:private] => 3 [content:SebastianBergmannDiffLine:private] => $a = new Money(1, new Currency('EUR')); ) [7] => SebastianBergmannDiffLine Object ( [type:SebastianBergmannDiffLine:private] => 3 [content:SebastianBergmannDiffLine:private] => $b = new Money(2, new Currency('EUR')); ) ) ) ) ) )
HINWEIS: Wenn die Chunk -Größe 0 Zeilen beträgt, dh getStartRange()
oder getEndRange()
return 0, ist die Anzahl der von getStart()
oder getEnd()
zurückgegebenen Zeilen ein niedrigerer als man erwarten würde. Es ist die Zeilennummer, nach der das Stück eingefügt oder gelöscht werden sollte. In allen anderen Fällen gibt es die erste Zeilenzahl des ersetzten Zeilenbereichs.