Download the PHP package sebastian/diff without Composer
On this page you can find all versions of the php package sebastian/diff. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download sebastian/diff
More information about sebastian/diff
Files in sebastian/diff
Package diff
Short Description Diff implementation
License BSD-3-Clause
Homepage https://github.com/sebastianbergmann/diff
Informations about the package diff
sebastian/diff
Diff implementation for PHP, factored out of PHPUnit into a stand-alone component.
Installation
You can add this library as a local, per-project dependency to your project using Composer:
If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:
Usage
Generating diff
The Differ
class can be used to generate a textual representation of the difference between two strings:
The code above yields the output below:
The UnifiedDiffOutputBuilder
used in the example above generates output in "unified diff"
format and is used by PHPUnit, for example.
The StrictUnifiedDiffOutputBuilder
generates output in "strict unified diff" format with
hunks, similar to diff -u
and compatible with patch
or git apply
.
The DiffOnlyOutputBuilder
generates output that only contains the lines that differ.
If none of these three output builders match your use case then you can implement
DiffOutputBuilderInterface
to generate custom output.
Parsing diff
The Parser
class can be used to parse a unified diff into an object graph:
The code above yields the output below:
Array
(
[0] => SebastianBergmann\Diff\Diff Object
(
[from:SebastianBergmann\Diff\Diff:private] => a/tests/MoneyTest.php
[to:SebastianBergmann\Diff\Diff:private] => b/tests/MoneyTest.php
[chunks:SebastianBergmann\Diff\Diff:private] => Array
(
[0] => SebastianBergmann\Diff\Chunk Object
(
[start:SebastianBergmann\Diff\Chunk:private] => 87
[startRange:SebastianBergmann\Diff\Chunk:private] => 7
[end:SebastianBergmann\Diff\Chunk:private] => 87
[endRange:SebastianBergmann\Diff\Chunk:private] => 7
[lines:SebastianBergmann\Diff\Chunk:private] => Array
(
[0] => SebastianBergmann\Diff\Line Object
(
[type:SebastianBergmann\Diff\Line:private] => 3
[content:SebastianBergmann\Diff\Line:private] => * @covers SebastianBergmann\Money\Money::add
)
[1] => SebastianBergmann\Diff\Line Object
(
[type:SebastianBergmann\Diff\Line:private] => 3
[content:SebastianBergmann\Diff\Line:private] => * @covers SebastianBergmann\Money\Money::newMoney
)
[2] => SebastianBergmann\Diff\Line Object
(
[type:SebastianBergmann\Diff\Line:private] => 3
[content:SebastianBergmann\Diff\Line:private] => */
)
[3] => SebastianBergmann\Diff\Line Object
(
[type:SebastianBergmann\Diff\Line:private] => 2
[content:SebastianBergmann\Diff\Line:private] => public function testAnotherMoneyWithSameCurrencyObjectCanBeAdded()
)
[4] => SebastianBergmann\Diff\Line Object
(
[type:SebastianBergmann\Diff\Line:private] => 1
[content:SebastianBergmann\Diff\Line:private] => public function testAnotherMoneyObjectWithSameCurrencyCanBeAdded()
)
[5] => SebastianBergmann\Diff\Line Object
(
[type:SebastianBergmann\Diff\Line:private] => 3
[content:SebastianBergmann\Diff\Line:private] => {
)
[6] => SebastianBergmann\Diff\Line Object
(
[type:SebastianBergmann\Diff\Line:private] => 3
[content:SebastianBergmann\Diff\Line:private] => $a = new Money(1, new Currency('EUR'));
)
[7] => SebastianBergmann\Diff\Line Object
(
[type:SebastianBergmann\Diff\Line:private] => 3
[content:SebastianBergmann\Diff\Line:private] => $b = new Money(2, new Currency('EUR'));
)
)
)
)
)
)
Note: If the chunk size is 0 lines, i.e., getStartRange()
or getEndRange()
return 0, the number of line returned by getStart()
or getEnd()
is one lower than one would expect. It is the line number after which the chunk should be inserted or deleted; in all other cases, it gives the first line number of the replaced range of lines.