Les constantes

Rechercher

Les constantes

  • Par Emacs
  • 15 commentaires
  • 37219 lectures
  • RSS -  Atom

En programmation, il est souvent nécessaire de définir des structures de données dont la valeur ne doit pas changer au cours de l'exécution du programme. Ces structures de données sont typiquement ce que l'on appelle des constantes. La plus connue des constantes mathématiques est par exemple le nombre PI dont la valeur est approximativement 3.1415926535898. Notons que PHP intègre nativement la constante M_PI. Celle-ci pourra alors être utilisée pour tout calcul de circonférence par exemple. Commençons par étudier comment on déclare une constante dans un programme PHP.

La fonction native define()

La déclaration de constante se prépare au moyen de la fonction native define() qui prend trois paramètres dont les deux premiers sont obligatoires. Voici le détail de la documentation officielle de la fonction define() :

Prototype de la fonction define()
bool define ( string $name, mixed $value [, bool $case_insensitive] )
  • Le premier paramètre de la fonction est une chaine de caractères qui définit le nom de la constante. Par convention, toutes les constantes doivent être écrites en majuscules.
  • Le second est la valeur que l'on affecte à cette constante. Cela peut-être une chaîne de caractères, un entier, un réel ou bien encore un booléen.
  • Enfin, le troisième argument est facultatif. C'est un booléen qui indique si l'interprêteur doit se soucier de la casse ou non de la constante.

Nous conseillons de ne jamais renseigner ce troisième argument afin d'imposer une rigueur dans l'écriture du code. Les deux premiers obligatoires suffisent. Passons à la déclaration de notre première constante.

Déclaration d'une constante

Comme tout le monde le sait (ou presque), l'eau bout à une température de 100°C (en théorie). Nous allons donc déclarer une première constante de nom TEMPERATURE_EBULLITION_EAU et qui renferme une information numérique de valeur 100.

Déclaration d'une constante
<?php
// Déclaration de la constante
define('TEMPERATURE_EBULLITION_EAU',100);
// Affichage de sa valeur
echo 'L\'eau bout à ', TEMPERATURE_EBULLITION_EAU ,'°C';
?>

Si l'on teste ce script, on constate que la chaîne de caractères « L'eau bout à 100°C » s'affiche correctement à l'écran, ce qui prouve que la constante a bien été déclarée et initialisée à la bonne valeur.

Notes :

[1] A la déclaration, si la valeur est un nombre, on l'inscrit telle qu'elle dans la fonction.
[2] Pour lire la valeur d'une constante, il suffit de l'appeller par son nom.

D'un point de vue chimique, l'eau est aussi une molécule constituée de deux atomes d'hydrogène auxquels sont associés un atome d'oxygène. Sa formule chimique s'écrit donc H2O. Nous allons donc créer une nouvelle constante de nom FORMULE_EAU représentant une chaîne de caractères de valeur H2O.

Déclaration d'une nouvelle constante
<?php
// Déclaration de la constante
define('FORMULE_EAU','H2O');
// Affichage de sa valeur
echo 'Formule chimique de l\'eau : ', FORMULE_EAU;
?>

Note : à la déclaration, si la valeur est une chaîne de caractères, il faut l'entourer d'apostrophes ou de guillemets doubles.

Redéfinition d'une constante

La valeur d'une constante ne peut être redéfinie ! Des erreurs de syntaxe seront retournées en cas de tentative de rédéfinition de constante ou d'affectation d'une nouvelle valeur. Les deux scripts suivants présentent respectivement ces deux cas.

Erreurs générées en cas de redéfinition d'une constante
[Erreur générée] Notice: Constant TEMPERATURE_EBULLITION_EAU already defined in /Applications/MAMP/htdocs/Tests-PHP/constante.php on line 6
[Erreur générée] Parse error: syntax error, unexpected '=' in /Applications/MAMP/htdocs/Tests-PHP/xml.php on line 6

Notons le signe = permettant l'affectation d'une valeur à une variable et non une constante. Pour plus d'information sur les variables, nous vous invitons à lire le tutoriel au sujet des variables.

Conclusion

Au terme de ce tutoriel, nous avons défini ce qu'est une constante et à quoi elle sert dans un programme informatique. De plus, nous avons présenté la fonction define() qui permet de déclarer des constantes. Enfin nous avons appris à lire le contenu d'une constante en l'appellant par son nom. Nous sommes prêts pour passer au tutoriel suivant concernant les variables, le pendant des constantes.



Les commentaires

1. Par Mickaël Wolff le 20/11/2007 01:45

Le problème de define, c'est qu'il définit globalement les constantes. Pour éviter les conflits, on peut utiliser les membres constants de classe.

class Counter
{
const MAX = 10 ;
// Reste du code de la classe...
}

2. Par `Haku le 23/11/2007 18:08

Ce n'est pas un problème, c'est son comportement. Et pour éviter les conflits, on a trouvé un truc génial : donner un nom unique en préfixant.

Ce n'est pas pour faire joli que toutes les constantes mathématiques comme par M_.

3. Par saturn1 le 25/12/2007 21:14

A quoi sa sert une constante?
Techniquement c'est la même chose qu'écrire une variable?

4. Par Emacs le 26/12/2007 00:35

Une constante c'est comme une variable mais avec une valeur que l'on ne peut pas modifier. Il est préfèrable de les utiliser quand on sait que certaines valeurs du programme resteront les mêmes. Par exemple, tu peux stockant la valeur de la TVA dans une constante car tu sais qu'elle ne bougera pas pendant toute l'exécution du programme.

++

5. Par saturn2 le 28/12/2007 12:55

Ah ok merci,
tu aurais pu le marquer dans le tutos

6. Par Sithran le 07/05/2008 22:09

Excepté pour la logique même du script, quels sont les avantages offerts par les constantes ? Sont-elles plus rapides que les variables ?

7. Par Emacs le 07/05/2008 23:22

@Sithran : il y'a deux avantages principaux. Tout d'abord au niveau du sens. Lorsque l'on déclare une constante, c'est que l'on sait que la valeur ne bougera jamais dans toute l'exécution du programme, contrairement aux variables dont l'objectif est de pouvoir contenir une valeur susceptible d'évoluer. Donc pour débugguer c'est bien plus pratique lorsque l'on déclare des constantes plutôt que des variables dont la valeur restera toujours fixe.

Le second gain concerne les performances. Il a été démontré que les accès en lecture des valeurs des constantes et plus rapide que celui des variables. Malgré tout c'est relativement infime comme temps.

Pour ma part, je suis adepte des constantes quand c'est nécessaire. J'apporte une grande importance à la qualité du code et donc notamment à l'utilisation correcte des structures de données. Retenez donc qu'il faut plutôt déclarer des constantes lorsque l'on manipule des valeurs fixes (par exemple des identifiants d'accès à une BDD) et des variables pour des valeurs qui vont évoluer au cours de l'exécution du programme.

8. Par shark le 24/05/2008 20:44

Merci

9. Par crio le 30/06/2008 14:48

Bonjour,
Est-il possible de définir une constante avec la valeur d'une variable à un moment donné (l'exécution d'un formulaire, par exemple)?

10. Par Emacs le 30/06/2008 22:26

Oui c'est possible

11. Par bilgo le 09/05/2009 17:48

Bonjour et merci pour ces tuto.

Je voudrais savoir s'il est possible de déclarer une liste d'utilisateurs d'un site web comme une constante dans le genre define ('TABLEAU', 'Users('x', 'y', 'z', '...''.

Merci

12. Par naki75 le 31/05/2009 17:22

Insulte à la chimie !
C'est H2O (la lettre O !) pas H20 (pas de ZERO !) !!

13. Par Emacs le 31/05/2009 20:55

Oups exactement naki75, il m'arrive de faire des fautes de frappe

14. Par Marie le 26/06/2009 06:13

Bravo et merci pour ces leçons... J'avance enfin dans ma compréhension de PHP !

15. Par Didjoman le 22/07/2009 00:12

Merci pour le tuto ;D