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
类可用于将统一的差异解析为对象图:
use SebastianBergmannDiffParser;use SebastianBergmannGit;$git = new Git('/usr/local/src/money');$diff = $git->getDiff( '948a1a07768d8edd10dcefa8315c1cbeffb31833', 'C07A373D2399F3E686234C4F7F088D635EB9641B'); $ 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()
返回的行数比一个人低一个。这是插入或删除块的行号;在所有其他情况下,它给出了替换线范围的第一行号。