การใช้งาน DIFF สำหรับ PHP โดยแยกออกจาก phpunit เป็นส่วนประกอบแบบสแตนด์อโลน
คุณสามารถเพิ่มไลบรารีนี้เป็นการพึ่งพาโครงการต่อโครงการของคุณโดยใช้นักแต่งเพลง:
composer require sebastian/diff
หากคุณต้องการเพียงห้องสมุดนี้ในระหว่างการพัฒนาตัวอย่างเช่นการเรียกใช้ชุดทดสอบโครงการของคุณคุณควรเพิ่มเป็นการพึ่งพาเวลาการพัฒนา:
composer require --dev sebastian/diff
คลาส Differ สามารถใช้ในการสร้างการแสดงข้อความของความแตกต่างระหว่างสองสตริง:
<? php ประกาศ (เข้มงวด _types = 1); ใช้ sebastianbergmanndiffdiffer ใช้ sebastianbergmanndiffoutputuifieddiffoutputbuilder; $ แตกต่าง = ใหม่ (ใหม่ Unifieddiffutputbuilder);
พิมพ์ $ differ-> diff ('foo', 'bar');รหัสด้านบนให้ผลผลิตด้านล่าง:
--- ต้นฉบับ +++ @@ @@-foo+bar
UnifiedDiffOutputBuilder ที่ใช้ในตัวอย่างด้านบนสร้างเอาต์พุตในรูปแบบ "Unified Diff" และใช้โดย pHPUNIT เช่น
StrictUnifiedDiffOutputBuilder สร้างผลลัพธ์ในรูปแบบ "เข้มงวดที่เข้มงวด" กับ Hunks คล้ายกับ diff -u และเข้ากันได้กับ patch หรือ git apply
DiffOnlyOutputBuilder สร้างเอาต์พุตที่มีเฉพาะบรรทัดที่แตกต่างกัน
หากไม่มีการสร้างเอาต์พุตทั้งสามนี้ตรงกับเคสการใช้งานของคุณคุณสามารถใช้ DiffOutputBuilderInterface เพื่อสร้างเอาต์พุตที่กำหนดเอง
คลาส Parser สามารถใช้เพื่อแยกความแตกต่างแบบครบวงจรลงในกราฟวัตถุ:
ใช้ sebastianbergmanndiffparser; ใช้ sebastianbergmanngit; $ git = new git ('/usr/local/src/money'); $ diff = $ git-> getdiff ('948a1a07768d8edd10dcefa8315c15c15c15c 'C07A373D2399F3E686234C4F7F088D635EB9641B'); $ parser = ใหม่ 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() ต่ำกว่าหนึ่งที่คาดไว้ มันเป็นหมายเลขบรรทัดหลังจากนั้นควรแทรกหรือลบก้อน ในกรณีอื่น ๆ ทั้งหมดจะให้หมายเลขบรรทัดแรกของช่วงของเส้นที่ถูกแทนที่