您可以在PHP中取消定义或更改常量吗?

时间:2011-06-23 14:38:26

标签: php constants

你可以在PHP中取消定义或更改常量吗?

6 个答案:

答案 0 :(得分:47)

没有。常数为constant

参考:php.net/manual/language.constants.php

答案 1 :(得分:21)

我知道这场比赛已经晚了......但这里有一件事可能对某些人有所帮助......

在我的“Application.php”文件中(我定义了所有常量并包含在我的所有脚本中)我做了类似这样的事情:

if( !defined( "LOGGER_ENABLED" )){
define( "LOGGER_ENABLED", true );
}

通常情况下,每个脚本都会启用日志记录...但是如果在一个特定的脚本中我不想要这种行为,我可以在我包含Application.php之前执行此操作:

define( "LOGGER_ENABLED", false );

答案 2 :(得分:14)

如果您绝对需要这样做(虽然我不会像其他人所说的那样推荐它),您可以随时使用Runkit。

http://www.php.net/manual/en/function.runkit-constant-redefine.php

http://www.php.net/manual/en/function.runkit-constant-remove.php

答案 3 :(得分:10)

没有。定义常量后,永远不会更改或未定义。

答案 4 :(得分:4)

其他海报是正确的 - 你不能这样做。但也许您可以将定义移动到您知道常量的最佳值的位置。

也许你在一个大清单中定义常量:

define('STRING1','Foo');
define('STRING2', 'Bar');
define('STRING3', 'Baz'); 

并且您希望在发现条件后更改STRING2的值。一种方法是推迟定义,直到您知道正确的设置。

define('STRING1','Foo');
// define('STRING2', 'Bar');  -- wait until initialization
define('STRING3', 'Baz');

...


if (condition) { 
   define('STRING2', 'Bar type 2');
} else {
   define('STRING2', 'Bar type 1');
}

逻辑设置STRING2甚至可以在不同的文件中,稍后在处理中。

答案 5 :(得分:4)

如别处所述,uopz扩展允许通过uopz_undefine()删除常量,用于PHP 5.4 +。