Возможный дубликат:
Можете ли вы присвоить значения константам с знаком равенства после использования, определенных в php?
Я не уверен, что это только я, но как вы переопределяете существующую константу что-то вроде этого:
define('HELLO', 'goodbye'); define('HELLO', 'hello!'); echo HELLO; <-- I need it to output "hello!" //unset(HELLO); <-- unset doesn't work //define('HELLO', 'hello!');
Правда, вы можете, но вы не должны. PHP – интерпретируемый язык, вы ничего не можете сделать. Расширение runkit позволяет вам изменять поведение внутренних компонентов PHP и предоставлять функцию runkit_constant_redefine (простая подпись).
Вы можете переопределить константу, если она была расширена из класса. Таким образом, в вашем случае вы не можете переопределить константу, поскольку она считается полученной из одного класса. т.е. ( взято из руководства php ):
<?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 ....
Если страница перезагружается, вы можете изменить динамическое значение константы.
Подобно:
$random = something_that_gives_me_randomness(); define('HELLO', $random);
Но если вы пытаетесь изменить константу в том же скрипте, то linepogl верен. Его называют константой по какой-то причине.