php - 如何在 PHP 中编写简单的插件支持?

标签 php plugins extensibility

我目前正在为自己编写一个小的 PHP 应用程序,我想为其添加一个简单的插件可扩展性。

我确实找到了一些关于如何做到这一点的想法,但我觉得它们都太复杂了,无法满足我的需求。

让我解释一下我到底需要什么:
我的应用程序应该执行一项简单的任务,例如:执行网络搜索。
用户应该能够选择使用哪个插件。
例如,您可以选择 Google、Yahoo 和 Bing 插件。
每个插件都有一个返回搜索结果的函数“performWebSearch”。
是的,基本上就是这样。

我可以向您展示我目前使用的代码,以使其更加清晰:

获取现有插件的列表:

$classes_before = get_declared_classes();
foreach(glob("../plugins/*.plugin.php") as $filename) include $filename;
$classes_after = get_declared_classes();

foreach($classes_after as $class)
{
    if(!in_array($class, $classes_before))
    {
        $plugins_available[] = $class;
    }
}

这就是“插件”目前的样子:

class google
{
    public $name = "Google Search";
    public $version = 1.0;

    public function performWebSearch($query)
    {
        // ...
    }
}

这行得通,但这样做感觉“很脏”。
我确信有更好的方法可以做到这一点,但我不知道它可能是什么。

感谢任何帮助。
谢谢。

最佳答案

您的解决方案确实很脏,不应使​​用。你可以使用 __autoload()函数加载必要的插件。您可能仍然需要扫描插件目录以查看哪些插件可用,但您应该只加载(包括)必要的插件。

http://ch1.php.net/manual/en/language.oop5.autoload.php

关于php - 如何在 PHP 中编写简单的插件支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099335/

相关文章:

grails - spring-security-core 插件的依赖问题

c# - .NET 中的类插件架构

php - Media Temple DV 4.0 上的 MS-SQL 连接

plugins - PhoneGap 插件的生命周期是多长?

PHP:要求与包括:实际考虑?

java - 从java项目中提取所有字符串

testing - 是否可以扩展 TestCafe Studio?

java - 可扩展/适应性强的 Java EE 应用程序 : interfaces vs interceptors and decorators

php - 无法在 Blade 服务器模板Laravel 5.2中获得$ error变量

php - 基于组件的php框架?