PHP의 Diff 구현, PHPUnit에서 독립형 구성 요소로 고려됩니다.
이 라이브러리를 작곡가를 사용하여 프로젝트에 현지의 프로젝트 별 종속성으로 추가 할 수 있습니다.
composer require sebastian/diff
예를 들어 프로젝트의 테스트 스위트를 실행하기 위해 개발 중에이 라이브러리 만 있으면 개발 시간 종속성으로 추가해야합니다.
composer require --dev sebastian/diff
Differ 클래스는 두 줄의 차이를 텍스트 표현하는 데 사용될 수 있습니다.
<? php declare (strict_types = 1); sebastianbergmanndiffdiffer를 사용하십시오; sebastianbergmanndiffoutunifeDiffoutBuilder 사용; $ differ = new Differ (new UnifiedDiffOutputBuilder); 인쇄 $ diffect-> diff ( 'foo', 'bar');
위의 코드는 아래의 출력을 산출합니다.
--- Original +++ new @@ @@ -Foo+바
위의 예에 사용 된 UnifiedDiffOutputBuilder 는 "Unified Diff"형식으로 출력을 생성하며 PHPUnit에 의해 사용됩니다.
StrictUnifiedDiffOutputBuilder 는 diff -u 와 유사하며 patch 또는 git apply 과 호환되는 덩어리가있는 "Strict Unified Diff"형식으로 출력을 생성합니다.
DiffOnlyOutputBuilder 는 다른 선만 포함하는 출력을 생성합니다.
이 세 가지 출력 빌더 중 어느 것도 유스 케이스와 일치하지 않으면 DiffOutputBuilderInterface 구현하여 사용자 정의 출력을 생성 할 수 있습니다.
Parser 클래스는 통합 된 차이를 객체 그래프로 구문 분석하는 데 사용될 수 있습니다.
sebastianbergmanndiffparser; sebastianbergmanngit; $ git = new git ( '/usr/local/src/money'); $ diff = $ git-> getDiff ( '948A1A07768d8edd10dcefa8315c1cbeffb31833', 'C07A373D2399F3E686234C4F7F088D635EB9641B'); $ parser = new Parser; 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() 가 반환 한 줄 수는 예상보다 낮습니다. 청크를 삽입하거나 삭제 해야하는 선 번호입니다. 다른 모든 경우에는 교체 된 라인 범위의 첫 번째 줄 번호를 제공합니다.