我正在学习如何在mediawiki中使用钩子。我也是PHP的新手。可以通过将下一行放入本地设置来添加常规钩子处理程序.php:
$wgHooks['event'][] = 'function';
假设我在my.php
文件中写了myfunction
。如何从本地设置指向此函数.php
编辑。我已经在我的文件中编写了一些函数.php。如何引用此函数?我应该告诉mediawiki在哪里可以找到这个功能。我不知道该怎么做。我应该写'$wgHooks['event'][] = 'my.php:function'
.或者我应该include
我的.php文件到本地设置,然后写入'$wgHooks['event'][] = 'function'
正如文档所说,您需要将带有函数名称的字符串(或字符串数组等)推送到钩子数组。
AFAIK,当触发钩子时,它们将被调用 call_user_func()
.因此,这将取决于您在 my.php 文件中的函数声明。有了myfunction
,应该是
$wgHooks['event'][] = 'myfunction';
从我从MediaWiki文档中读到的内容来看,您需要创建一个扩展,并在扩展中安装钩子。 在我的.php中,您将写入:
// $wgHooks is a global variable
$wgHooks['event'][] = 'function';
希望我理解正确扩展文档http://www.mediawiki.org/wiki/Manual:Extensions
我不确定我是否完全理解你想要什么,但是如果你想调用一个用户定义的函数,你可以使用call_user_func,它将你的函数的名称作为参数。您必须包含该文件,以便该功能可用。
call_user_func('myfunction ', array());
你在 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
和$y
替换为$arg1
和$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
}
}
这样,您可以从 LocalSettings.php
加载MyExtension.php
(这是一个仅包含配置设置的小文件),并且MyExtension.body.php
(包含所有代码)仅在实际使用扩展的请求中加载。