您通过PHP 中的回调来引用函数。回调是其中之一:
- 一个函数名:
'myFunc'
- 一个包含类名和函数名的数组:
array('MyClass', 'myFunc')
- 一个包含对象和函数名的数组:
array($myObj, 'myFunc')
- 一个匿名函数(技术上是一个闭包对象):(
function($x, $y) { /* PHP code */ }
这只是 PHP 5.3+,但 MediaWiki 的最新版本也是如此)
通过调用这些回调call_user_func($callback, $arg1, $arg2)
将分别等效于以下内容:
myFunc($arg1, $arg2);
MyClass::myFunc($arg1, $arg2);
$myObj->myFunc($arg1, $arg2);
- 执行匿名函数的主体,将
$x
and$y
替换为$arg1
and$arg2
如果此代码失败(例如,您使用第一个版本,并且myFunc
未加载该函数),回调也将失败。您可以在 MediaWiki 中使用第二种形式的自动加载,通常通过$wgAutoloadClasses完成:
// in MyExtension.php
$wgHooks['event'][] = array('MyExtension', 'myEventHandler');
$wgAutoloadClasses['MyExtension'] = dirname(__FILE__) . 'MyExtension.body.php';
// in MyExtension.body.php
class MyExtension {
public function myEventHandler($p1, $p2) {
// do stuff
}
}
这样,您可以从 加载MyExtension.php
(这是一个仅具有配置设置的小文件)LocalSettings.php
,并且MyExtension.body.php
(其中包含所有代码)仅在实际使用您的扩展的那些请求中加载。