FAQ PHP
FAQ PHPConsultez toutes les FAQ
Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021
- Comment créer une constante ?
- Peut-on modifier une constante ?
- Quelles sont les constantes prédéfinies du PHP ?
- Comment tester l'existence d'une constante ?
- Comment accéder à une constante ?
- Comment connaître la liste des constantes définies ?
- Quels sont les types possibles pour une constante ?
- Comment définir des constantes pour toutes les pages de votre site ?
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 :
$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 :
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 :
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 :
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 :
- M_PI : valeur de pi
- M_EULER : constante d'Euler
- etc.
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.
Attention la fonction isset($var) ne fonctionne que sur les variables.
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.
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 :
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().
Seuls les nombres (entier et flottant) et les chaînes peuvent être définis comme constante. Les tableaux et objets ne le peuvent pas.
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 :
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
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:
include_once(_basedir_.
"
/lib/malib.inc
"
);
que pour les liens vers les pages ou les images:
echo '
<a href="
'
.
_baselink_ .
'
/images/image5.jpg"> Mon image</a>
'
;