Переопределить существующую определенную константу

Возможный дубликат:
Можете ли вы присвоить значения константам с знаком равенства после использования, определенных в 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 верен. Его называют константой по какой-то причине.