【问题标题】:How to determine if a class method exists如何判断一个类方法是否存在
【发布时间】:2021-02-28 21:50:57
【问题描述】:

我正在将一些 Drupal 7 代码移植到 8 并坚持一件事。在 D7 中,我构建了一些带有特殊钩子函数的自定义模块,可以提供一些调试信息。要获取它们的列表,我可以调用 module_implements('debugInfo')。对于 D8,我想从 modules/custom 目录开始进行搜索,并返回一个模块列表,其中包含一个名为“debugInfo”的公共成员函数的类。有没有办法做到这一点?我找到了一个例子,第一个答案在PHP - get all class names inside a particular namespace,但是如果我有一个带有我正在寻找的方法的基类,它还会报告继承该基类的所有子类。

因为我只关心我的自定义模块,所以我不能使用 composer 来做这件事。我想要的是一种从起始目录中获取已实现类的字典,并从类中获取可用方法列表的方法。

【问题讨论】:

    标签: methods callback


    【解决方案1】:

    听起来您可能想要一个自定义插件管理器。

    在 Drupal 8(现在是 9)中,您可以创建插件管理器服务,然后在每个模块中实现插件,以便在需要时调用信息,而不是实现自定义挂钩和搜索。管理器服务会自动发现插件,您可以根据需要调用它们。

    创建插件比自定义钩子需要更多的工作,但也更灵活,并为您提供了选择。这些资源可以帮助您了解详细信息:

    为了帮助你走捷径,你正在阅读一点:从一个带注释的插件开始。

    【讨论】:

    • 感谢您对示例的出色回应,这确实有助于我理解发生了什么。我发现向 Drupal 8 的过渡非常困难,但有时当转向更多面向对象的方法时,我很难理解一些概念。我正在考虑制作一个事件侦听器来执行此操作,但插件看起来是一种更好的方法。再次感谢,这看起来很有趣。
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多