可能重复:
Can you assign values to constants with equal sign after using defined in php?
我不确定这只是我,但你如何覆盖现有的常数:
define('HELLO', 'goodbye');
define('HELLO', 'hello!');
echo HELLO; <-- I need it to output "hello!"
//unset(HELLO); <-- unset doesn't work
//define('HELLO', 'hello!');
答案 0 :(得分:10)
事实是,你可以,但你不应该。 PHP是一种解释型语言,没有什么是你“不能”做的。 runkit扩展允许您修改PHP内部行为,并提供runkit_constant_redefine(简单签名)函数。
答案 1 :(得分:7)
如果从类扩展,则可以覆盖常量。 因此,在您的情况下,您不能覆盖常量,因为它考虑来自同一个类。 即(taken from php manual):
<?php
class Foo {
const a = 7;
const x = 99;
}
class Bar extends Foo {
const a = 42; /* overrides the `a = 7' in base class */
}
$b = new Bar();
$r = new ReflectionObject($b);
echo $r->getConstant('a'); # prints `42' from the Bar class
echo "\n";
echo $r->getConstant('x'); # prints `99' inherited from the Foo class
?>
如果您打开php错误报告 即:
ini_set('display_errors',1);
error_reporting(E_ALL|E_STRICT);
您会看到类似
的通知Notice: Constant HELLO already defined in ....
答案 2 :(得分:5)
如果页面正在重新加载,您可以使用动态值更改常量。
像:
$random = something_that_gives_me_randomness();
define('HELLO', $random);
但是如果你试图在同一个脚本中更改常量,那么linepogl是正确的。它被称为常数是有原因的。