Php Symfony2服务中的回调失败

Php Symfony2服务中的回调失败,php,symfony,callback,Php,Symfony,Callback,在我的项目中,我将该类用作服务。创建diff工作正常,但是,当我尝试使用例如FineDiff::renderToTextFromOpcodes()恢复diff时,什么也没有发生 我仔细研究了一下代码,发现回调不起作用。在评论了一些 if ( !is_callable($callback) ) { return; } 我遇到了错误: 警告:call_user_func()要求参数1为有效回调,在/var/www/sopos blog/src/sopos/WikiBundle/Servic

在我的项目中,我将该类用作服务。创建diff工作正常,但是,当我尝试使用例如
FineDiff::renderToTextFromOpcodes()
恢复diff时,什么也没有发生

我仔细研究了一下代码,发现回调不起作用。在评论了一些

if ( !is_callable($callback) ) {
    return;
}
我遇到了错误:

警告:call_user_func()要求参数1为有效回调,在/var/www/sopos blog/src/sopos/WikiBundle/Services/FineDiff.php第321行中找不到类“FineDiff”

以下是一些相关的代码行:

公共静态函数renderToTextFromOpcodes($from,$opcodes){
ob_start();
FineDiff::renderFromOpcodes($from,$opcodes,array('FineDiff','renderToTextFromOpcode'));
返回ob_get_clean();
}
// ...
公共静态函数renderFromOpcodes($from、$opcodes、$callback){
如果(!可调用($callback)){
返回;
}
$opcode_len=strlen($opcode);
$from_offset=$opcodes_offset=0;
而($opcodes\U offset<$opcodes\U len){
$opcode=substr($opcode,$opcode_offset,1);
$opcodes_offset++;
$n=intval(substr($opcode,$opcode_offset));
如果(n美元){
$opcodes_offset+=strlen(strval($n));
}
否则{
$n=1;
}
如果($opcode==='c'){//从源代码复制n个字符
调用用户函数($callback,'c',$from,$from,$from,'u offset,$n',);
$from_offset+=$n;
}
// ...

我猜您的类的FQCN是
Sopos\WikiBundle\Services\FineDiff
,因此回调必须是以下之一:

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

您还可以用真实的名称空间替换
\uuuu名称空间\uuuu

我猜您的类的FQCN是
Sopos\WikiBundle\Services\FineDiff
,因此回调必须是以下之一:

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

您还可以用真实的命名空间替换
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

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

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

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