FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 29 juillet 2013 

 
OuvrirSommaireConstantes

Quand on veut conserver tout au long de la durée du script une même valeur en mémoire, on a deux solutions : 1. déclarer une variable et lui affecter une valeur que l'on ne modifiera pas au cours du script 2. déclarer une constante

La permière solution n'est pas la bonne car il est toujours possible que, par erreur, cette variable soit modifiée. Exemple :

 
Sélectionnez
$PATH = 'http://www.monsite.com/mondossier/';
require($PATH.'config.php');
...
$PATH = $foobar; // oups changement !
readfile($PATH.$file);

Pour être sûr que notre valeur ne variera pas au cours du script, déclarons une constante :

 
Sélectionnez
define("PATH", 'http://www.monsite.com/mondossier/');
require(PATH.'config.php');

Attention, les noms de constante ne sont pas préfixés du symbole dollar $ ni dans leur déclaration, ni dans leur utilisation.

define($name, $value [, $opt]) prend un troisième argument -- optionnel celui-là -- qui, mis à 1, permet d'utiliser la constante sans que son identifiant soit sensible à la casse (la casse est la différence majuscule / minuscule). Exemple :

 
Sélectionnez
define("CST1","constante 1");
define("CST2","constante 2", 1);
echo CST1; // affiche "constante 1"
echo cst1; // provoque une erreur
echo CST2; // affiche "constante 2"
echo cst2; // affiche "constante 2"
Mis à jour le 3 août 2008  par Cyberzoide

Non. Comme sont nom l'indique une constante est... constante :) Même une tentative de re déclaration avec define() ne sera suivie d'aucun effet.

Exemple :

 
Sélectionnez
define("LANG", "français");
define("LANG", "anglais");
echo LANG; // affiche "français"
Mis à jour le 3 août 2008  par Cyberzoide

Les constantes de base :

  • __FILE__ : nom du script en cours
  • __LINE__ : numéro de la ligne en cours
  • PHP_VERSION : numéro de version de PHP
  • PHP_OS : version du système d'exploitation hébergeant PHP
  • PHP_SELF : nom du script courant
  • TRUE : valeur booléenne VRAI
  • FALSE : valeur booléenne FAUX
  • E_ERROR, E_WARNING, E_PARSE, E_NOTICE, E_ALL : dénotation d'erreur

Il existe bien d'autres constantes propres à certaines bibliothèques :

mathématiques :

  • M_PI : valeur de pi
  • M_EULER : constante d'Euler
  • etc.
Mis à jour le 3 août 2008  par Cyberzoide

La fonction defined($str) retourne TRUE si la constante qui porte pour nom la valeur de la chaîne $str est définie, sinon FALSE.

 
Sélectionnez
if(defined("MYCST")) {
    echo "ok définie";
}

Attention la fonction isset($var) ne fonctionne que sur les variables.

Mis à jour le 3 août 2008  par Cyberzoide

Une fois définie, une constante est accessible n'importe où : elle est donc globale. Il n'est alors pas nécessaire de recourir à des stratagèmes similaires à global (pour les variables) pour connaître une constante à l'intérieur d'une fonction.

 
Sélectionnez
define("MYCST", "ma constante à moi");
function foobar() {
    if(defined("MYCST")) {
        echo MYCST;
    }
}

foobar();  // affiche "ma constante à moi"

On accède à la valeur d'une constante en en spécifiant le nom sans le préfixer du dollar $. Autre méthode : la fonction constant($str) retourne la valeur de la constante dont le nom est égal à la valeur de la chaîne $str. Exemple :

 
Sélectionnez
define("MYCST", "ma constante");
echo MYCST;  // affiche "ma constante"
echo constant("MYCST");   // affiche "ma constante"
Mis à jour le 3 août 2008  par Cyberzoide

La fonction get_defined_constants() retourne un tableau associatifs listant toutes les constantes définies dans le script en cours. Les clés sont les noms des constantes, et les valeurs, leurs valeurs.

Les constantes listées sont celles de base du PHP, celles rajoutées par les diverses extensions chargées par PHP, et celles définies par l'utilisateur avec define().

 
Sélectionnez
<table>
    <caption>Liste des constantes définies</caption>
    <tr>
        <th>Nom</th>
        <th>Valeur</th>
    </tr>
    <?php
    $tab_const = get_defined_constants();
    foreach($tab_const as $key => $value) {
        echo "<tr>
                        <td>$key</td>
                        <td>$value</td>
                    </tr>";
    }
    ?>
</table>
Mis à jour le 3 août 2008  par Cyberzoide

Seuls les nombres (entier et flottant) et les chaînes peuvent être définis comme constante. Les tableaux et objets ne le peuvent pas.

Mis à jour le 3 août 2008  par Cyberzoide

Il existe deux directives du php.ini permettant de charger un script avant ou après le chargement d'une page. Il s'agit des variables auto_prepend_file et auto_append_file.

Définissez dans un fichier const.php les constantes que vous voulez accessibles partout dans votre site.
Exemple :

 
Sélectionnez
if(!(defined('_BASEDIR_')))
    define(_BASEDIR_, "/var/www/site1");
if(!(defined('_BASELINK_')))
    define(_BASELINK_, "http://www.votresite.com");

Vous n'avez plus qu'a indiquer à votre fichier php.ini quel fichier doit être chargé avant chaque exécution de script (Attention, le chemin spécifié doit l'être dans le système de fichiers local).<br />php.ini

 
Sélectionnez
auto_prepend_file = /var/www/const.php

Cette astuce vous permet notamment de travailler avec des chemins absolus en toute quiétude, tant pour l'inclusion de fichier:

 
Sélectionnez
include_once(_basedir_."/lib/malib.inc");

que pour les liens vers les pages ou les images:

 
Sélectionnez
echo '<a href="' . _baselink_ . '/images/image5.jpg"> Mon image</a>';
Mis à jour le 3 août 2008  par f-demu01
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.