面向对象模式和原则在插件开发中的应用

时间:2011-10-28 作者:ProfK

我正忙着用PHP 5.3.5编写我的第一个插件。我来自C#环境,我必须说我对PHP中良好、可靠的OOP技术的支持水平非常满意。然而,我有点不确定如何使用类构造插件。我有一个插件类,负责其构造函数中的钩子注册,还有一些工作类,如邮件队列和邮件程序,但我有一个或两个非类脚本,主要用于表单,我不太知道如何巧妙地适应类。关于我的OO插件这方面的指导,我可以参考哪些资源?

该插件用于群发邮件,即按时向所有订阅者发送邮件等。它为邮件模板注册了一个自定义的帖子类型,具有添加新内容和编辑功能,并在管理菜单的底部添加了自己的菜单,目前有两个子菜单页:“设置”和“发送邮件”。它还向用户配置文件页面添加了一个“退出”选项,但这非常整洁,很容易包含主插件类。

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

我有一个或两个非类脚本,主要用于表单,我不太知道如何巧妙地适应类。

将项目拆分为多个类。将工作类保持为可实例化对象(典型的OOP模式),并将非类脚本作为静态脚本放入自己的类中。

我经常使用静态PHP类以这种方式命名我的代码。示例:

class My_Object {
    public $variable = 1;

    public function __construct() {
        // Constructor
    }

    public function do_something() {
        // Misc. method for the object
        $this->variable++;
    }
}

static class Helper {
    public static function Run_Script() {
        // Function that does something and doesn\'t belong in a class
    }
}
这两个类之间的区别在于实例化了一个(My_Object) 并将其用作对象。另一个基本上是不属于对象但也不属于全局名称空间的函数的名称空间包装器。

比如说,你刚开始的时候Run_Script() 插件中的方法。。。后来,另一位开发人员添加了Run_Script() 方法添加到另一个插件。您现在有名称冲突。将独立函数保留在静态类中有助于防止出现这种情况。

打个电话就行了Helper::Run_Script() 访问它。

关于我的OO插件这方面的指导,我可以参考哪些资源?

基本上,看看其他人做了什么。有相当多的优质插件遵循这种模式。因此,看看其他人是如何解决这个问题的,并从他们的例子中学习。

GitHub是查看代码的好地方。我的大多数插件都在上面,因此您可以浏览代码文件来查看结构,而无需下载和安装它们。

GitHub上的一些优秀开发人员,您应该遵循这些开发人员来获取更多示例:

SO网友:EarnestoDev

class Plugin{
    static public function Construct(){
        static $single_call = false; // Enable calling this just once
        if($single_call) return; // Skip double hooking
        add_filter(\'the_content\', array(__CLASS__, \'TheContent\'));
        $single_call = true; // Block future calls
    }
    /**
     * @internal
     */
    static private function ContentModifier($content){
        return $content;
    }
    // All actions/filters must be public, internal methods can stay private
    static public function TheContent($content){
        return self::ContentModifier($content);
    }
}
Plugin::Construct(); // Single Call
为插件创建静态类。操作/筛选器必须是公共的。

而且,在使用PHP 5.3+时,请考虑需要一次性使用难以删除的操作/过滤器的闭包。

add_filter(\'the_content\', function($content){
    return $content;
});
I come from C++, <欢迎使用PHP

结束

相关推荐

Create a blank test.php

有时有必要找出CSS错误或其他什么,如果您有一个最小的测试页面,只需插入要测试的特定代码,那就太好了。我如何创建这样一个空测试。php?我只能找到this. 但是,这样做只会创建与页面样式相同的页面。php一号,不是吗?我想我需要在我的功能中加入一些东西。php告诉Wordpress它应该为测试创建一个新模板。php?我该怎么做?提前非常感谢!:)