Подтвердить что ты не робот

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

Возможный дубликат:
Можете ли вы присвоить значения константам с знаком равенства после использования, определенных в php?

Я не уверен, что это только я, но как вы переопределите существующую константу что-то вроде этого:

define('HELLO', 'goodbye');
define('HELLO', 'hello!');

echo HELLO; <-- I need it to output "hello!"

//unset(HELLO); <-- unset doesn't work
//define('HELLO', 'hello!'); 
4b9b3361

Ответ 1

Правда, вы можете, но вы не должны. PHP - интерпретируемый язык, вы ничего не можете сделать. Расширение runkit позволяет изменять поведение внутренних компонентов PHP и предоставлять функцию runkit_constant_redefine (простая подпись).

Ответ 2

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

Ответ 3

Если страница перезагружается, вы можете изменить динамическое значение константы.

Как

$random = something_that_gives_me_randomness();

define('HELLO', $random);

Но если вы пытаетесь изменить константу в том же script, то строкаpogl верна. Его называют константой по какой-то причине.