0

我正在创建一个样板类以在我创建的每个 wordpress 插件上使用。(如果“样板”不是正确的调用方式,Mods 可以随意编辑)。我在所有插件和所有代码中都使用了一些常量,因此我正在寻找正确的命名方式。

在我的代码中,我有这个:

//edit these
define( 'WPB_PREFIX'                        , 'wsm');
define( 'WPB_SLUG'                          , 'wp-simple-monitor'); // Need to match plugin folder name
define( 'WPB_PLUGIN_NAME'                   , 'WP Simple Monitor');
define( 'WPB_VERSION'                       , '1.0');
//dont edit
define( WPB_PREFIX.'_ABS_PATH'              , WP_PLUGIN_DIR . '/'. WPB_SLUG          );
define( WPB_PREFIX.'_REL_PATH'              , dirname( plugin_basename( __FILE__ ) )             );
define( WPB_PREFIX.'_PLUGIN_URL'            , WP_PLUGIN_URL . '/'. WPB_SLUG          );

class WP_Plugin_Base
    {
    // ...
    _e('Settings', WPB_PREFIX);
    // ...
    }

因此,例如,在我的代码中,我像这样使用它:

<?php _e('Settings', WPB_PREFIX);?>

到目前为止一切正常,但如果我最终在同一个项目中使用两个插件,我必须检查我的所有代码并按照已经定义的方式更改“WPB_PREFIX”。有一种简单的方法可以做到这一点而无需抛出所有代码?

谢谢

4

1 回答 1

2

您可以(并且应该!)将它们定义为类属性而不是全局常量。您可以有一个基类来设置您需要访问的常量的默认值,然后扩展该类:

class WP_Plugin_Base
{
    protected $wpbPrefix = 'wsm';
    protected $wpbSlug = 'wp-simple-monitor';
    // etc.
}

class WP_Plugin_Specific extends WP_Plugin_Base
{
    protected $wpbSlug = 'wp-plugin-specific';

    function someMethod() {
        _e('Settings', self::wpbPrefix);
        _e('Slug', self::wpbSlug);
    }
}

后一个类中方法的输出将是原始前缀,带有新的 slug。如评论中所述,您将需要受保护的变量而不是类常量,以便能够使用连接的部分来定义事物,例如:

protected $absPath = WP_PLUGIN_DIR . '/' . $wpbSlug;
protected $relPath = dirname( plugin_basename( __FILE__ ) );
protected $pluginUrl = WP_PLUGIN_URL . '/' . $wpbSlug;

这样,每当您使用所需的特定类时,您都可以获得已经从您拥有的通用类中获得的所有好处,但您不会遇到交叉问题。

这也可以防止您试图弄清楚如果它已经定义了要做什么,这也意味着只要保留默认值是有意义的,您就可以:self::property如果您没有覆盖它,将检索基类属性。这应该可以为您提供所需的一切,并且在您使用它时不会弄乱全局名称空间。

于 2013-05-14T02:36:26.243 回答