我在项目中使用PHP-FineDiff
类作为服务。但是,当我尝试使用例如恢复差异时,创建差异很好。 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;
}
// ...
答案 0 :(得分:1)
我猜你班级的FQCN是Sopos\WikiBundle\Services\FineDiff
,所以回调必须是这样的:
$arrayCallback = array(__NAMESPACE__.'\FineDiff','renderToTextFromOpcode');
$stringCallback = __NAMESPACE__.'\FineDiff::renderToTextFromOpcode';
您也可以用真实命名空间替换__NAMESPACE__
。
答案 1 :(得分:0)
Symfony2无法自动加载课程FineDiff
。将命名空间添加到回调:
public static function renderToTextFromOpcodes($from, $opcodes) {
ob_start();
FineDiff::renderFromOpcodes($from, $opcodes, array(__NAMESPACE__.'\FineDiff','renderToTextFromOpcode'));
return ob_get_clean();
}