如何参考功能?

时间:2012-05-30 17:11:37

标签: php hook mediawiki

我正在学习如何在mediawiki中使用hooks。我也是PHP的新手。 可以通过将下一行放入LocalSettings.php:

来添加常规钩子处理程序
$wgHooks['event'][] = 'function';

假设我在myfunction文件中写了my.php。如何从LocalSettings.php

指向此函数

编辑。我在my.php文件中写了一些函数。如何参考这个功能? 我应该告诉mediawiki在哪里找到这个函数。我不知道该怎么做。 我应该写'$wgHooks['event'][] = 'my.php:function'。或者我应该include my.php文件到LocalSetting然后只写'$wgHooks['event'][] = 'function'

4 个答案:

答案 0 :(得分:3)

正如docs所说,您需要将带有函数名称的字符串(或字符串数​​组等)推送到钩子数组。

AFAIK,当触发钩子时,将使用call_user_func()调用它们。因此,它将取决于my.php文件中的函数声明。使用myfunction时,它应该是

$wgHooks['event'][] = 'myfunction';

答案 1 :(得分:2)

从我从mediawiki文档中读到的内容,您需要创建一个扩展,并在您的扩展中安装您的钩子。在my.php中你会写:

 // $wgHooks is a global variable
 $wgHooks['event'][] = 'function';

希望我理解正确 扩展文档 http://www.mediawiki.org/wiki/Manual:Extensions

答案 2 :(得分:0)

我不确定我完全理解你想要什么,但是如果你想调用用户定义的函数,你可以使用call_user_func作为参数作为函数的名称。您必须include该文件,以便该功能可用。

call_user_func('myfunction ', array());

答案 3 :(得分:0)

您在PHP中通过callbacks引用函数。回调就是其中之一:

  1. 函数名称:'myFunc'
  2. 包含类名和函数名的数组:array('MyClass', 'myFunc')
  3. 包含对象和函数名称的数组:array($myObj, 'myFunc')
  4. 一个匿名函数(技术上是一个Closure对象):function($x, $y) { /* PHP code */ }(这只是PHP 5.3+,但MediaWiki的最新版本也是如此)
  5. 通过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
    5. 如果此代码失败(例如,您使用第一个版本,并且未加载函数myFunc),则回调也将失败。你可以在MediaWiki中使用autoloading和第二种形式,通常是通过$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(包含所有代码)只会加载到那些实际使用您的扩展程序的请求。