2012-05-30 24 views
0

我正在學習如何在mediawiki中使用hooks。我也是PHP的新手。 一般掛鉤處理程序可以通過把下一行中的LocalSettings.php中加入:如何引用一個函數?

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

假設我在my.php文件中寫道:myfunction。如何從LocalSettings.php指向此功能

編輯。我在my.php文件中寫了一些函數。如何引用這個函數? 我應該告訴mediawiki在哪裏找到這個功能。我不知道該怎麼做。 我應該寫'$wgHooks['event'][] = 'my.php:function'。或者我應該include my.php文件LocalSetting,然後就寫'$wgHooks['event'][] = 'function'

回答

3

隨着docs說,你需要推一根繩子與你函數名(或字符串等組成的數組)到鉤子數組。

AFAIK,當觸發掛鉤時,將調用call_user_func()。所以,它將取決於my.php文件中的函數聲明。隨着myfunction,它應該是

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

我應該'包括'my.php文件到LocalSettings.php? – ashim

+0

是的,請參見[手冊:擴展#安裝擴展(步驟3)](http://www.mediawiki.org/wiki/Manual%3aExtensions#Installing_an_extension)。 – Bergi

0

我不知道我完全理解你想要什麼,但如果你要調用一個用戶定義的函數,你可以使用call_user_func這需要作爲參數名稱你的功能。你必須include該文件,所以該功能將可用。

call_user_func('myfunction ', array()); 
2

從我從mediawiki文檔中讀取的內容,您需要創建一個擴展,並在您的擴展中安裝您的掛鉤。在my.php你會寫:

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

希望我理解正確 擴展文檔 http://www.mediawiki.org/wiki/Manual:Extensions

+0

但我不想創建一個擴展。我只想在某個事件(掛鉤)上運行函數。 – ashim

+0

您需要在mediawiki中包含my.php以便能夠安裝事件處理程序。簡單的方法是創建一個基本的擴展。 「硬」的方式(實際上並不難,但不好的做法)是修改mediawiki源代碼,但這是擴展的目的:能夠在不修改內核的情況下包含自己的源代碼。 –

0

您通過callbacks在PHP指的是函數。回調是這些中的一個:

  1. 函數名:'myFunc'
  2. 包含一個類名稱和一個函數名稱的數組:array('MyClass', 'myFunc')
  3. 含有一個對象和一個函數名稱的數組:array($myObj, 'myFunc')
  4. 一個匿名函數(這在技術上是一個Closure對象):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和 and $arg2

如果此代碼將失敗(例如,您使用第一個版本,並且未加載功能myFunc),回調也將失敗。您可以使用autoloading與第二種形式,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.phpMyExtension.body.php(其擁有所有代碼)只會在實際使用您的擴展的請求中加載。

相關問題