如何引用函数


How to refer to a function?

我正在学习如何在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 中通过回调引用函数。回调是以下之一:

  1. 函数名称:'myFunc'
  2. 包含类名和函数名的数组:array('MyClass', 'myFunc')
  3. 包含对象和函数名称的数组:array($myObj, 'myFunc')
  4. 一个匿名函数(技术上是一个闭包对象):function($x, $y) { /* PHP code */ }(这只是PHP 5.3+,但最新版本的MediaWiki也是如此)

通过 call_user_func($callback, $arg1, $arg2) 调用这些回调将分别等效于以下内容:

  1. myFunc($arg1, $arg2);
  2. MyClass::myFunc($arg1, $arg2);
  3. $myObj->myFunc($arg1, $arg2);
  4. 执行匿名函数的主体,将$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(包含所有代码)仅在实际使用扩展的请求中加载。