nochso/diff

差异实现

2.0.0 2016-05-31 18:04 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:31:38 UTC


README

命名空间: \nochso\Diff

PHP 的差异实现,支持文本、HTML 和控制台输出

此库是基于 sebastian/diff 的分支:虽然原始的差异实现没有显著变化,但增加了新功能

  • 修改行周围的上下文行数的可配置限制
  • 用于显示差异的纯 PHP 模板
    • 纯文本
    • 彩色 POSIX 控制台输出
    • HTML
    • Github 风格的 Markdown
  • 修改现有模板或创建自己的模板
  • 基于 "before" 字符串的行编号
  • Upstream 格式化器,以保持与 sebastian/diff 的兼容性——并保留原始测试

安装

composer require nochso/diff

用法

通过传递两个字符串给 Diff::create() 创建一个 Diff 对象开始

$diff = \nochso\Diff\Diff::create('foo', 'bar');

Diff 对象包含一个 DiffLine 对象列表,包含文本、行号和差异操作类型。

foreach ($diff->getDiffLines() as $line) {
    if ($line->isRemoval()) {
        echo 'Line ' . $line->getLineNumberFrom() . " was removed:\n";
        echo $line->getText() . "\n";
    }
}

大多数时候你都会想在某个地方显示差异。你可以将 Diff 实例传递给实现了 Formatter 接口的任何对象

$formatter = new \nochso\Diff\Format\Template\Text();
echo $formatter->format($diff);

输出

1: -foo
 : +bar

如何实现两行上下文和 Github 风格的 Markdown 呢?

$context = new ContextDiff();
$context->setMaxContext(2);
$diff = Diff::create($from, $to, $context);
$gfm = new \nochso\Diff\Format\Template\GithubMarkdown();
echo $gfm->format($diff);
```diff
 2: pariatur ground round
 3: dolore meatloaf nisi
-4: shoulder.
 5: Consequat rump spare
-6: ribs ham hock shank.
 7: Magna esse nisi
 8: frankfurter picanha
```

如你所见,在创建 Diff 时,你可以传递一个 ContextDiff 对象来更改默认行为。