2012-05-31 2 views
0

Вопрос о функциях и аргументах в PHP. Я читаю код simple extension для mediawiki. Он добавляет функцию обратного вызова:средства массовой информации wiki. как функция получила аргумент?

$wgHooks['ArticleSaveComplete'][] = 'fnAutoWikiDump'; 

, а затем есть определение этой функции:

function fnAutoWikiDump(&$article, &$user, &$text, &$summary, &$minoredit, 
        &$watchthis, &$sectionanchor, &$flags, &$revision){...} 

внутри этой функции я могу получить доступ к членам класса $ статьи:

$awd_title = $article->getTitle(); 

я не могу понять, как переменная $article была передана функции при ее вызове? Похоже, что это было передано в определении функции (я знаю, что это неправильно), но я не понимаю, как это было передано. Вы?

ответ

1

Код, который вы опубликовали, и код примера в ссылке не показать детали фактического вызова функции. Он просто зарегистрирован как обратный вызов. Часть полезности функций обратного вызова состоит в том, что вам обычно не нужно называть их самостоятельно, а они вызываются автоматически процессом, который их использует.

Где-то в коде MediaWiki, где обратные вызовы, зарегистрированные ArticleSaveComplete называются (есть массив из них), правильные параметры передаются при вызове функции в обычном и узнаваемый вызове функции или с помощью механизма как call_user_func().

При определении обратного вызова для работы с этим интерфейсом ваша ответственность как программиста состоит в том, чтобы убедиться, что определение функции принимает правильное количество параметров в правильном порядке и с правильными именами. Детали того, как он вызван, связаны с механизмом, который его вызывает.

+0

Имена параметров на самом деле не имеют значения, и вам не требуется иметь одинаковое количество параметров в определении функции, как и в вызове функции. – Tgr

Смежные вопросы