PHPのコールバックを介して関数を参照します。コールバックは次のいずれかです。
- 関数名:
'myFunc'
- クラス名と関数名を含む配列:
array('MyClass', 'myFunc')
- オブジェクトと関数名を含む配列:
array($myObj, 'myFunc')
- 匿名関数(技術的にはClosureオブジェクト):(
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
がロードされていない場合)、コールバックも失敗します。通常$wgAutoloadClassesを介して行われるMediaWikiの2番目の形式で自動読み込みを使用できます。
// 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
(すべてのコードを含む)は、実際に拡張機能を使用するリクエストでのみロードされます。