การใช้งาน 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()
ต่ำกว่าหนึ่งที่คาดไว้ มันเป็นหมายเลขบรรทัดหลังจากนั้นควรแทรกหรือลบก้อน ในกรณีอื่น ๆ ทั้งหมดจะให้หมายเลขบรรทัดแรกของช่วงของเส้นที่ถูกแทนที่