web-dev-qa-db-fra.com

Pouvez-vous définir ou modifier une constante en PHP?

Pouvez-vous définir ou modifier une constante en PHP?

38

Non. Les constantes sont constantes .

Référence: php.net/manual/language.constants.php

48
George Cummins

Je sais que c'est tard dans le jeu ... mais voici une chose qui pourrait aider certaines personnes ...

Dans mon fichier "Application.php" (où je définis toutes mes constantes et les inclue dans tous mes scripts) je fais quelque chose comme ceci:

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

Donc normalement, chaque script va activer la journalisation ... mais si dans UN script particulier, je ne veux pas ce comportement, je peux simplement le faire AVANT d'inclure mon Application.php:

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

Si vous avez absolument besoin de le faire (bien que je ne le recommanderais pas comme d'autres l'ont dit), vous pouvez toujours utiliser 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

Non. Une fois qu'une constante est définie, elle ne peut jamais être modifiée ou indéfinie.

10
Colin

Comme cela n'est pas mentionné ailleurs, l'extension uopz permet de supprimer une constante via uopz_undefine (), pour PHP 5.4+.

4
Nick Rice

Les autres affiches sont correctes - vous ne pouvez pas faire ça. Mais vous pouvez peut-être déplacer votre définition au point où vous savez quelle serait la meilleure valeur pour la constante.

Vous définissez peut-être des constantes dans une grande liste:

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

et vous souhaitez modifier la valeur de STRING2 une fois que vous découvrez une condition. Une façon serait de différer la définition jusqu'à ce que vous connaissiez le paramètre correct.

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');
}

Le paramètre logique STRING2 peut même se trouver dans un fichier différent, plus tard dans votre traitement.

4
Scott C Wilson