我正在攻击现有的MediaWiki扩展程序ProcessCite,它会为Cite extension添加自定义挂钩。自从迁移到PHP 5.4和MW 1.22(从PHP 5.3和MW 1.19.2),扩展似乎无法正常工作。问题是自定义钩子没有返回它应该做的数据。
以下是代码的相关部分:
ProcessCite.php
# Declare the hook:
$wgHooks['CiteBeforeStackEntry'][] = 'wfProcessCite';
# the function itself
function wfProcessCite($str, $argv){
# process $argv and $str to create a new version of $str
# $argv remains unchanged, $str is set to new value
...
$str = "new string";
return true;
}
在Cite_body.php中
function stack( $str, $key = null, $group, $follow, $call ) {
# add the call to the CiteBeforeStackEntry hook
wfRunHooks( 'CiteBeforeStackEntry', array( &$str, &$call ) );
我在wfProcessCite
的开头和结尾添加了调试语句,表明$str
正在被修改;但是,wfRunHooks
之前和之后的调试语句对$str
没有任何更改。
有人可以帮忙吗?
答案 0 :(得分:0)
在Mediawiki邮件列表中得到了Andru Vallance的答案:
在函数参数前面添加一个&符号会导致它通过引用传递给它。 这意味着您将直接操作函数内的原始变量,而不是副本。
function wfProcessCite( &$str, $argv ){ $str = ‘new value’; return true;