在样板类上命名常量

时间:2013-05-14 02:19:12

标签: php naming-conventions constants

我正在创建一个样板类,用于我创建的每个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”。有一种简单的方法可以在不抛出所有代码的情况下执行此操作吗?

由于

1 个答案:

答案 0 :(得分:2)

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

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。作为noted in the comments,你需要保护变量而不是类常量,以便能够用连接的部分定义事物,例如:

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

这样,无论何时使用您需要的特定课程,您都可以从您拥有的通用课程中获得所有的好处,但是您没有交叉问题。

这也可以防止你试图找出做什么(如果已经定义了),这也意味着只要保留默认值,你就可以:{{1}如果你没有重写它将检索基类属性。这应该可以为您提供所需的一切,并且在您使用它时不会使全局命名空间变得混乱。