web-dev-qa-db-ja.com

PHPで定数を定義解除または変更できますか?

PHPで定数を定義解除または変更できますか?

38

いいえ。定数は 定数 です。

リファレンス: php.net/manual/language.constants.php

48
George Cummins

私はこれがゲームに遅れていることを知っています...しかし、これは一部の人々を助けるかもしれない1つのものです...

「Application.php」ファイル(すべての定数を定義し、すべてのスクリプトに含める)で、次のようなことを行います。

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

したがって、通常、すべてのスクリプトでロギングが有効になります...しかし、ある特定のスクリプトでこの動作が望ましくない場合は、Application.phpをインクルードする前にこれを実行できます。

define( "LOGGER_ENABLED", false );
23
Patrick Steil

絶対にこれを行う必要がある場合(他の人が述べているように私はお勧めしませんが)、常にRunkitを使用できます。

http://www.php.net/manual/en/function.runkit-constant-redefine.php

http://www.php.net/manual/en/function.runkit-constant-remove.php

14
Nils Luxton

いいえ。定数を定義すると、変更したり未定義にしたりすることはできません。

10
Colin

他で言及されていないように、uopz拡張モジュールでは、PHP 5.4+。

4
Nick Rice

他のポスターは正しいです-あなたはこれを行うことはできません。ただし、おそらく、定数の最適な値が何であるかを知っているポイントに定義を移動できます。

おそらく、あなたは大きなリストで定数を定義しているでしょう:

define('STRING1','Foo');
define('STRING2', 'Bar');
define('STRING3', 'Baz'); 

条件が見つかったらSTRING2の値を変更します。 1つの方法は、正しい設定がわかるまで定義を延期することです。

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のロジック設定は、後の処理で別のファイルに入れることもできます。

4
Scott C Wilson