PHP 到 ASP.NET - call_user_func() 等效吗?

标签 php asp.net web-applications

我想知道是否有与 PHP 的 call_user_func() 等效的函数在 ASP.NET 应用程序中。我希望通过使用我专业构建的 CMS 并尝试用另一种语言重新创建它,将 PHP 应用程序转换为 ASP.NET 作为自学语言的一种方式。

我需要一个与此类似的函数的原因,是因为我的 PHP CMS 的当前结构涉及插件架构,并且 CMS 的特定部分为插件公开自己,然后它将返回的信息作为数组进行处理。这与 Drupal 使用的系统几乎相同。

我可能在这个错误的轨道上吗?

我想为了澄清起见,我应该提供一个示例,说明它在我当前的系统中是如何工作的:

<?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";
    }
}

?>

注意:InvokeHook() 调用被简化,因为我是从内存中编写的,但这就是它的要点。

最佳答案

在 .NET 中,我可能会创建一些事件并处理它们。这是一种方法:

public class CMS

    public Event DoSomethingHook(byval sender as Object, byval e as DoSomethingEventArgs)

    public function DoSomething()
        dim data() as Integer = {} 
        Dim e as new DoSomethingEventArgs();
        e.data = data
        RaiseEvent DoSomethingHook(Me, e)
        data = e.data
    end function
end class


' Let's say Plugin base class contains a reference to CMS
public class CMSPlugin
    Inherits Plugin 

    public sub New()
        ' Register for a hook
        AddHandler CMS.DoSomethingHook, AddressOf DoSomething
    end sub

    public function DoSomething(byval sender as Object, byval e as DoSomethingEventArgs)
        ' Do something with e.data
    end function
end class

public class DoSomethingEventArgs : Inherits EventArgs
    public data() as Integer
end class

关于PHP 到 ASP.NET - call_user_func() 等效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/396620/

相关文章:

javascript - HTML5 Canvas 应用程序 (javascript) - 如何检测内存泄漏?

PHP fatal error : Class 'PDO' not found

java - Tomcat集群新手

php - 变量为空,直到重新分配

c# - 在自动回发功能后将焦点设置回正确的文本框(Page.SetFocus 不能解决问题)

asp.net - 嵌套 ViewModel 的验证

asp.net - 应用程序变量与 Web.Config 变量

php - 使用PHP检索多维数组中的第一个键

php - file_get_contents 与 Lumen

php - Composer fatal error : Declaration of Fxp. .. 必须与第 334 行的 ...AbstractAssetsRepository.php 兼容