你可以在PHP中取消定义或更改常量吗?
答案 0 :(得分:47)
答案 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 +。