Je me demande s'il existe une fonction équivalente à call_user_func()
de PHP dans l'application ASP.NET. Je cherche à faire une conversion d'une application PHP à ASP.NET pour m'enseigner la langue, en prenant un CMS que j'ai construit professionnellement et en essayant de le recréer dans cette autre langue. La raison pour laquelle j'ai besoin d'une fonction similaire est que la structure actuelle de mon CMS PHP implique une architecture de plugin, et que des parties spécifiques du CMS s'exposent pour les plugins, et il gère ensuite les informations retournées sous forme de tableau . C'est à peu près le même système que Drupal utilise.PHP à ASP.NET - call_user_func() équivalent?
Suis-je peut-être sur la mauvaise voie avec ceci?
Je pense que des éclaircissements je donner un exemple de la façon dont cela fonctionne dans mon système actuel:
<?php
class Test {
function TestMessage() {
// set up array
$arrTest = array("Hello", "World");
// get extra values from all available plugins
$arrExtras = CMS::InvokeHook("HelloTest");
// now contains Hello, World, Foo, Bar
$arrTests = array_merge($arrTest, $arrExtras);
}
}
class CMS {
InvokeHook($function) {
// now contains a couple plugins
$plugins = CMS::GetPlugins();
// empty array of values
$values = array();
foreach($plugins as $plugin) {
// if this plugin has the called method...
if(method_exists($plugin, $function)) {
// call the function and merge in the results
$values[] = call_user_func(array($plugin, $function));
}
}
// return results as an array
return $values;
}
}
class FooTest {
function HelloTest() {
return "Foo";
}
}
class BarTest {
function HelloTest() {
return "Bar";
}
}
?>
REMARQUE: L'appel InvokeHook() est simplifiée comme je l'écris ceci de la mémoire, mais qui est l'essentiel de celui-ci.
pouvez-vous expliquer à nous développeurs ASP.NET ce que cela fonctionne? –
Ceci appelle une méthode d'un nom donné sous la forme d'une chaîne. Si vous passez dans un tableau, la première chaîne est la classe et la seconde est le nom de la fonction. Vous pouvez également passer un nombre quelconque d'arguments que les fonctions peuvent utiliser (ma méthode actuelle InvokeHook l'utilise) – spelley