PHP-FineDiff
プロジェクトでクラスをサービスとして使用しています。diff の作成は正常に機能しますが、eg を使用して diff を復元しようとするとFineDiff::renderToTextFromOpcodes()
、何も起こりません。
コードを少し調べたところ、コールバックが機能しないことがわかりました。一部コメントアウト後
if ( !is_callable($callback) ) {
return;
}
エラーが発生します:
警告: call_user_func() は、パラメータ 1 が有効なコールバックであることを期待しています。クラス 'FineDiff' が /var/www/sopos-blog/src/Sopos/WikiBundle/Services/FineDiff.php 行 321 に見つかりません。
関連するコード行を次に示します。
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;
}
// ...