Advice on plugin structure

时间:2013-02-11 作者:Jamie

我正在为我的慈善网站写一个插件,希望能对插件中的类的结构提出一些建议。

目前,该插件基于OOP,只有一个类。然而,在一个文件中包含许多函数会变得非常笨拙。我想知道是否最好将不同的方面划分为不同的类,例如一个类用于前端,一个用于后端,一个用于验证选项时。

我遇到的困难是调用每个类的最佳方式以及如何处理助手函数。我最初的想法是创建一个“parent”类,然后根据检查的数量“需要”相应的类(例如is_admin). 我的困难是如何处理helper方法和变量。如果我将它们放在父类中,我将如何在子类中访问它们?

如有任何想法,将不胜感激。

1 个回复
SO网友:fuxia

您应该限制助手函数。在我目前正在编写的一个相当大的插件中(大约50个类),我只有三个助手函数,放在插件主文件中:

/**
 * Delete plugin option on deactivation.
 *
 * @return boolean
 */
function t5_delete_option() {
    return delete_site_option( \'plugin_t5\' );
}


/**
 * Load a class from /inc/ directory.
 *
 * @since  2012.10.26
 * @param  string  $class         Class name
 * @param  boolean $create_object Return an object or nothing
 * @return bool|$class
 */
function t5_load_class( $class, $create_object = FALSE ) {

    $path = plugin_dir_path( __FILE__ ) . "inc/class-$class.php";

    if ( ! file_exists( $path ) )
        return FALSE;

    class_exists( $class ) || require_once $path;

    if ( $create_object )
        return new $class;

    return TRUE;
}

if ( ! function_exists( \'pre_print\' ) ) {

    /**
     * Print debug output
     *
     * @since  2012.11.03
     * @param  mixed
     * @return void
     */
    function pre_print( $var, $before = \'\' ) {

        $export = var_export( $var, TRUE );
        $escape = htmlspecialchars( $export, ENT_QUOTES, \'utf-8\', FALSE );
        print "$before<pre>$escape</pre>";
    }
}
所有其他类都放置在一个目录中/inc/ (这不是我的选择,我必须在现有规则的范围内工作)。

文件结构应该反映文件的用途,而不是它们的使用位置,因为这可以随时更改。

实施amain controller 类,该类加载当前情况下所需的文件。所以我必须看看one place 只是为了看看发生了什么。

主控制器收集一些数据(插件URL、当前用户的IP地址、自定义数据库类的实例…)并将这些数据作为property list object 到被调用的类。因此,除了类加载器(我不使用自动加载器)和微小的调试功能之外,永远不需要全局访问任何东西。

结束

相关推荐

Excluded category from loop

我使用它从循环中排除特定类别。它做到了这一点,但它也做到了这一点:在我的页面上,它显示了除此之外的其他类别的帖子。/** Replace the standard loop with our custom loop */ remove_action( \'genesis_loop\', \'genesis_do_loop\' ); add_action( \'genesis_loop\', \'child_do_custom_loop\' ); function chil