Supprimer une constante en PHP

Supprimer une constante en PHP, voilà une idée bien bizarre ! Effectivement, si l’on veut modifier ou supprimer une constante alors il ne devrait pas s’agir d’une constante mais d’une variable. Je suis tout à fait d’accord sur ce point !

Alors pourquoi vouloir supprimer une constante ? J’ai pris l’habitude d’écrire des tests unitaires pour les logiciels que je développe. Cela me permet de m’assurer qu’ils fonctionnent correctement et de faire évoluer le logiciel de façon plus ou moins importante sans « casser » le reste de l’application. Le problème c’est que j’ai un fichier qui défini une constante. Pour les tests sur ce fichier, je définis une constante à une valeur particulière mais dans les autres fichiers de tests cette constante doit reprendre sa valeur normale… L’idée ici est donc de supprimer la constante à la fin du fichier de tests pour permettre de la redéfinir dans les autres.

En PHP, de base, il n’est pas possible de supprimer une constante et c’est tout à fait compréhensible. Toutefois, il existe une extension PECL qui permet, entre autre, de modifier et de supprimer une constante : Runkit. L’extension n’est quasiment jamais disponible sur un serveur web mais peu importe, je lance les tests en local donc pas de problème.

Runkit propose une fonction pour supprimer une constante : runkit_constant_remove et une fonction pour modifier une constante : runkit_constant_redefine.

Bon, il me faut maintenant réussir à compiler cette extension sur Mac OS X Leopard et ça ne semble pas gagné. J’ai un beau « Unable to load dynamic library ‘./runkit.so’ – (null) in Unknown on line 0″ dans le fichier de log d’Apache après la compilation et l’installation de Runkit. Si quelqu’un a réussi à faire fonctionner l’extension sur Mac OS X, qu’il n’hésite pas à poster sa solution en commentaire

2 réflexions sur “ Supprimer une constante en PHP ”

  1. Une autre solution consite à séparer chacun de tes tests dans un processus php distinct, ce qui te permettra en plus d’augmenter l’isolation de tes tests et te permettra d’être sur que le test précédent n’a pas permis au test en cours de passer, par exemple en mettant certaine valeurs nécéssaires au test en cours en base de données ou en mémoire (une autre solution pour faire cela est d’éxécuter ta suite de tests en mode « shuffle », dans ce cas, les tests sont éxécutés dans un ordre aléatoire). Pour faire cela, pcntl_fork() et consoeurs sont tes amies (c’est ce que j’utilise dans ogo).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

:D :) :o :eek: :( :lol: :wink: :arrow: :idea: :?: :!: :evil: :p