تنفيذ DIF لـ PHP ، الذي تم تأسيسه من phpunit إلى مكون مستقل.
يمكنك إضافة هذه المكتبة كاعتماد محلي لكل مشروع على مشروعك باستخدام الملحن:
composer require sebastian/diff
إذا كنت بحاجة فقط إلى هذه المكتبة أثناء التطوير ، على سبيل المثال لتشغيل مجموعة اختبار مشروعك ، فيجب عليك إضافتها كاعتماد على وقت التطوير:
composer require --dev sebastian/diff
يمكن استخدام فئة Differ
لإنشاء تمثيل نصي للفرق بين سلسلتين:
<؟ php denare (strict_types = 1) ؛ استخدم sebastianbergmanndiffdiffer ؛ استخدم sebastianbergmanndiffoutputunifunifieddiffoutputbuilder ؛ $ differ = جديد (جديد diffoutputbuilder) ؛ print $ differ> diff ('foo' ، 'bar') ؛
الرمز أعلاه يعطي الإخراج أدناه:
--- الأصلي +++ جديد-Foo+BAR
يولد UnifiedDiffOutputBuilder
المستخدم في المثال أعلاه الإخراج بتنسيق "Diff الموحد" ويستخدمه phpunit ، على سبيل المثال.
يولد StrictUnifiedDiffOutputBuilder
الناتج بتنسيق "Diff الصارم الموحد" مع الصخ ، على غرار diff -u
ومتوافق مع patch
أو git apply
.
يولد DiffOnlyOutputBuilder
الإخراج الذي يحتوي فقط على الخطوط التي تختلف.
إذا لم يتطابق أي من بناة الإخراج الثلاثة هذه ، فيمكنك تنفيذ DiffOutputBuilderInterface
لإنشاء إخراج مخصص.
يمكن استخدام فئة Parser
لتحليل فرق موحد في رسم بياني كائن:
استخدم Sebastianbergmanndiffparser ؛ استخدم Sebastianbergmanngit ؛ $ git = new git ('/usr/local/src/money') ؛ $ diff = $ git-> getDiff ('948A1A07768D8D8edd10dce8315cbeffb31833' ، '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()
Return 0 ، فإن عدد الأسطر التي يتم إرجاعها بواسطة getStart()
أو getEnd()
أقل مما يتوقعه المرء. هذا هو رقم السطر الذي يجب أن يتم إدراجه أو حذفه ؛ في جميع الحالات الأخرى ، يعطي رقم السطر الأول من نطاق الخطوط المستبدلة.