在定义常量之前检查常量是否存在

时间:2013-03-05 作者:urok93

我看到许多插件使用以下格式定义其常量:

/* Set the constant path to the plugin\'s javascript directory. */
if( !defined( \'MY_ETS_JS\' ) )
    define( \'MY_ETS_JS\', MY_ETS_URI . trailingslashit( \'js\' ), true );    
所以在我们定义常数之前,基本上有一个检查。

我的问题是,为什么这项检查是必要的?如果我制作了插件的新版本,并想将javascript文件夹的名称从“js”更改为“javascript”,该怎么办?我将不得不在升级例程中包含该更改。为什么不直接定义常量而不检查它们的存在?

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

这些不是PHP global variables, 它们是无法修改的常量(因此得名)。

尝试使用define() 将触发通知,因为它们已经定义(并因此保留指定的初始值)。为了远离通知,你应该检查他们是否defined() 之前

示例:

define(\'VARIABLE\', \'hello\');
define(\'VARIABLE\', \'world\');
echo VARIABLE;
结果:

Notice: Constant VARIABLE already defined in **your-file** on line xxx
hello
在这种情况下,变量不会更新为world.

示例使用defined():

define(\'VARIABLE\', \'hello\');

if(!defined(\'VARIABLE\')){
  define(\'VARIABLE\', \'world\');
}
else{
  echo "VARIABLE HAS ALREADY BEEN DEFINED.<br />";
}
echo VARIABLE;
结果:

VARIABLE HAS ALREADY BEEN DEFINED.
hello
在这种情况下,您可以指定在已定义常量的情况下要执行的操作。

SO网友:tfrommen

不能重新定义定义。它们被称为常数。因此,这更像是一种不产生错误的检查。

您要么设置一个新的定义,要么使用一个定义,该定义反过来又使用一些动态部分(即变量)。

结束

相关推荐