Можете ли вы неопределить или изменить константу в PHP? - PullRequest
38 голосов
/ 23 июня 2011

Можете ли вы отменить определение или изменить константу в PHP?

Ответы [ 6 ]

47 голосов
/ 23 июня 2011
22 голосов
/ 08 апреля 2013

Я знаю, что это поздно для игры ... но есть одна вещь, которая может помочь некоторым людям ...

В моем файле "Application.php" (где я определяю все свои константы и включаюво всех моих сценариях) я делаю что-то вроде этого:

if( !defined( "LOGGER_ENABLED" )){
define( "LOGGER_ENABLED", true );
}

Так что обычно для каждого сценария включается ведение журнала ... но если в ОДНОМ конкретном сценарии я не хочу такого поведения, я могуделайте это ДО того, как я включу свой Application.php:

define( "LOGGER_ENABLED", false );
14 голосов
/ 23 июня 2011

Если вам абсолютно необходимо это сделать (хотя я бы не рекомендовал это, как утверждали другие), вы всегда можете использовать Runkit.

10 голосов
/ 23 июня 2011

Нет.Как только константа определена, она никогда не может быть изменена или неопределена.

4 голосов
/ 11 мая 2016

Как не упоминалось ранее, расширение uopz позволяет удалять константу с помощью uopz_undefine (), для PHP 5.4 +.

4 голосов
/ 23 июня 2011

Остальные постеры верны - вы не можете этого сделать.Но, возможно, вы можете переместить определение в точку, где вы знаете, какое будет лучшее значение для константы.

Возможно, вы определяете константы в большом списке:

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 может даже находиться в другом файле, позже в процессе обработки.

...