web-dev-qa-db-fra.com

Changer la valeur d'une constante précédemment définie

J'ai défini une constante dans PHP, par exemple.

define('CONSTANT_NAME', 'constant_value');

Je veux pouvoir changer la valeur de cette constante plus tard dans le code.

Cela peut-il être fait? Si c'est le cas, comment?

18
Carl Thomas

De http://php.net/manual/en/function.define.php (c'est moi qui souligne):

define - Définit un constant nommé

De http://www.php.net/manual/en/language.constants.php :

Comme son nom l'indique, cette valeur ne peut pas changer pendant l'exécution du script.

27
Oliver Charlesworth

Il est possible de redéclarer la définition, alors qu'elle était définie précédemment comme constante case_insensitive (troisième paramètre).

Voir:

$ php -r "define('TEST','foo',true); var_dump(TEST); define('TEST','bar'); var_dump(TEST);"
string(3) "foo"
string(3) "bar"

Testé avec PHP CLI 5.2.6 et 5.5.3.

14
kenorb

Vous n'avez pas créé de variable, vous avez créé une constante. Le point essentiel d’une constante est qu’ils ne peuvent pas être changés.

Vous devriez utiliser une vraie variable à la place.

8

Il existe un moyen de changer les constantes définies précédemment. Vous devez activer l’extension PHP runkit à cet effet: http://php.net/manual/en/function.runkit-constant-redefine.php

L'extension runkit fournit un moyen de modifier les constantes, définies par l'utilisateur fonctions et classes définies par l'utilisateur. Il prévoit également une personnalisation variables superglobales et sous-interprètes intégrables via sandboxing.

Il vous donne le pouvoir de modifier l’aspect que vous souhaitez modifier dans PHP. Ce sont des choses avancées cependant.

Veuillez ne pas noter que il y a généralement une raison pour que les constantes soient définies comme constantes; par conséquent, changer cela à des fins autres que les tests n'est probablement pas une bonne idée dans presque tous les cas.

0
Blackbam