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()返回的行數比一個人低一個。這是插入或刪除塊的行號;在所有其他情況下,它給出了替換線範圍的第一行號。