在开发插件时,是否值得检查CLASS_是否存在以及如何进行检查?

时间:2014-04-15 作者:dashaluna

我正在学习使用OOP方法开发WordPress插件。在大多数资源中,在声明类之前,通常会检查类是否存在class_exists().

这是检查这一点的好方法还是可以省略?

另外,我想知道如果插件的类都不存在,那么签入一个块是否是一种好方法。即使已经存在一个类,整个插件也不能正常工作,因为它不能重新声明一个类。因此class_exists() 通过代码,我想知道在激活插件时是否最好将其放在一个块中,例如:

if ( class_exists( \'Class_Name_One\' )
|| class_exists( \'Class_Name_Two\' )
|| class_exists( \'Class_Name_Three\' )
|| class_exists( \'Class_Name_Four\' ) ) {

    exit;
}

非常感谢您的任何建议和反馈。

EDIT如果与另一个声明相同类名的插件发生冲突,我想停用我的插件并显示管理员通知。

1 个回复
SO网友:fuxia

使用自动加载器,让PHP为您解决这个问题。然后只加载一个类,您不必担心重复声明。

示例

我有一个(未完成的)插件Post Notes 具有以下文件结构:

- plugin.php
- php/
   - Nonce_Validator.php
   - Save_Post_Request_Validator.php
   - Textarea.php
   - … and more
这是一个非常简单的插件,因此所有文件都使用相同的名称空间Wpkrauts. 在里面plugin.php, 我注册了一个简单的自动加载例程:

spl_autoload_register( function( $name ) {

    $name = ltrim( $name, \'\\\\\' );

    if ( \'Wpkrauts\' !== strtok( $name, \'\\\\\' ) )
        return;

    $file = strtok( \'.\' );

    $path = __DIR__ . "/php/$file.php";

    if ( file_exists( $path ) )
        require $path;
});

// Now start.
is_admin() && new Post_Notes( \'wpkrauts_post_notes\' );
您可以在不使用名称空间的情况下执行相同的操作(不推荐,当您必须支持不安全的PHP版本(如5.2)时除外)。

在PHP 5.2中,可以关闭SPL库,但这在我所知道的插件中从来都不是问题。我们公司发布了像backwup这样的插件,下载量超过了100万次,而且从来没有一个插件符合这一点。

结束

相关推荐