1

PHP-FineDiff在我的项目中使用该类作为服务。创建差异工作正常,但是,当我尝试使用 eg 恢复差异FineDiff::renderToTextFromOpcodes()时,没有任何反应。

我在代码中挖掘了一下,发现回调不起作用。注释掉一些后

if ( !is_callable($callback) ) {
    return;
}

我遇到了错误:

警告:call_user_func() 期望参数 1 是一个有效的回调,在 /var/www/sopos-blog/src/Sopos/WikiBundle/Services/FineDiff.php 第 321 行中找不到类“FineDiff”。

这些是一些相关的代码行:

public static function renderToTextFromOpcodes($from, $opcodes) {
    ob_start();
    FineDiff::renderFromOpcodes($from, $opcodes, array('FineDiff','renderToTextFromOpcode'));
    return ob_get_clean();
}

// ...

public static function renderFromOpcodes($from, $opcodes, $callback) {
    if ( !is_callable($callback) ) {
        return;
        }
    $opcodes_len = strlen($opcodes);
    $from_offset = $opcodes_offset = 0;
    while ( $opcodes_offset <  $opcodes_len ) {
        $opcode = substr($opcodes, $opcodes_offset, 1);
        $opcodes_offset++;
        $n = intval(substr($opcodes, $opcodes_offset));
        if ( $n ) {
            $opcodes_offset += strlen(strval($n));
            }
        else {
            $n = 1;
            }
        if ( $opcode === 'c' ) { // copy n characters from source
            call_user_func($callback, 'c', $from, $from_offset, $n, '');
            $from_offset += $n;
            }

// ...
4

2 回答 2

1

我猜你班级的 FQCN 是Sopos\WikiBundle\Services\FineDiff,所以回调必须是以下之一:

$arrayCallback = array(__NAMESPACE__.'\FineDiff','renderToTextFromOpcode');
$stringCallback = __NAMESPACE__.'\FineDiff::renderToTextFromOpcode';

您也可以用__NAMESPACE__真正的命名空间替换。

于 2012-08-10T15:01:33.750 回答
0

Symfony2 无法自动加载该类FineDiff。将命名空间添加到回调中:

public static function renderToTextFromOpcodes($from, $opcodes) {
  ob_start();
  FineDiff::renderFromOpcodes($from, $opcodes, array(__NAMESPACE__.'\FineDiff','renderToTextFromOpcode'));
  return ob_get_clean();
}
于 2012-08-10T15:03:00.643 回答