diff
1.0.0
PHP的DIFF實現將PHPUNIT分為獨立組件。
您可以使用Composer將此庫作為本地,每項項目依賴性添加到您的項目中:
composer require sebastian/diff
如果您在開發過程中只需要此庫,例如,要運行項目的測試套件,則應將其添加為開發時間依賴性:
composer require --dev sebastian/diff
Differ
類可用於生成兩個字符串之間差異的文本表示:
<?php聲明(strict_types = 1);使用sebastianbergmanndiffdiffer;使用sebastianbergmanndiffOutputunifutunifieddiffOutputbuilder; $ difly; $ divel = new drive = new dislift dislift dislifate dislifate dislifate dislifate distric(新的unieddiffOutputbuilder); 打印$ differ-> diff('foo','bar');
上面的代碼得出以下輸出:
---原始+++ new @@ @@ @@- foo+bar
上面示例中使用的UnifiedDiffOutputBuilder
以“統一diff”格式生成輸出,例如,phpunit使用。
StrictUnifiedDiffOutputBuilder
以Hunks的形式生成“嚴格統一差異”格式的輸出,類似於diff -u
,並且與patch
或git apply
兼容。
DiffOnlyOutputBuilder
生成僅包含不同行的輸出。
如果這三個輸出構建器都不匹配您的用例,則可以實現DiffOutputBuilderInterface
來生成自定義輸出。
Parser
類可用於將統一的差異解析為對像圖:
使用sebastianbergmanndiffparser;使用sebastianbergmanngit; $ git = new Git('/usr/locar/local/src/money'); $ diff = $ gitdiff('948A1A077768D8EDDDCEFA8315C15C1CBEFFB333E33E33E33EN3EN3ER.N.948A1A077768D8DD8DD8DD8DDD83EN3EN3EN3ER 4F7F088D635EB9641B'); $ parser = new Parser; print_r( print_r( $ PARSER-> PARSE($ diff));
上面的代碼得出以下輸出:
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')); ) ) ) ) ) )
注意:如果塊大小為0行,即,即getStartRange()
或getEndRange()
返回0, getStart()
或getEnd()
返回的行數比一個人低一個。這是插入或刪除塊的行號;在所有其他情況下,它給出了替換線範圍的第一行號。