我可以省略`if(!)吗?定义插件常量时是否定义...)`?

时间:2012-06-17 作者:KajMagnus

我正在写一个WordPress插件。在插件文件的顶部,我定义了一些常量。我可以省略if ( ! defined( \'THE_CONSTANT\' ) ) 测试?

我研究过的其他一些插件包括if ( ! defined 测试,有些没有。就个人而言,我不知道为什么我的插件文件会被包含两次?

我不想包括的原因if ( ! defined ... 我认为这很难理解:
XYZABC将是插件名称)

if ( ! defined( \'XYZABC_PLUGIN_BASENAME\' ) )
    define( \'XYZABC_PLUGIN_BASENAME\', plugin_basename( __FILE__ ) );
if ( ! defined( \'XYZABC_SETTINGS_SLUG\' ) )
    define( \'XYZABC_SETTINGS_SLUG\', \'xyzabc_comments_options\' );
if ( ! defined( \'XYZABC_ENABLED_QUERY_PARAM\' ) )
    define( \'XYZABC_ENABLED_QUERY_PARAM\', \'xyzabc-comments-enabled\' );
但这本书读起来相对不错:

define( \'XYZABC_PLUGIN_BASENAME\', plugin_basename( __FILE__ ) );
define( \'XYZABC_SETTINGS_SLUG\', \'xyzabc_comments_options\' );
define( \'XYZABC_ENABLED_QUERY_PARAM\', \'xyzabc-comments-enabled\' );
<小时>Update:
Workaround.
我定义了这个函数,然后重复的常量名称问题基本上消失了。

function myplugin_define_default($constant_name, $value) {
    if (! defined($constant_name))
        define($constant_name, $value);
}
现在我的代码是这样的:

define( \'XYZABC_PLUGIN_BASENAME\', plugin_basename( __FILE__ ) );
xyzabc_define_default( \'XYZABC_SETTINGS_SLUG\', \'xyzabc_comments_options\' );
xyzabc_define_default( \'XYZABC_ENABLED_QUERY_PARAM\', \'xyzabc-comments-enabled\' );

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

通过执行!defined() 选中“允许早期代码在您之前定义该常量”。这可能很有用,例如,如果允许用户为文件中的某些常量定义自己的值,如wp-config.php.

至于代码可读性,您可以考虑使用以下一行程序,尽管您可以将if 也在一条线上。

defined(\'XYZABC_PLUGIN_BASENAME\') or define(\'XYZABC_PLUGIN_BASENAME\', \'your_value\');

结束

相关推荐