La différence entre les variables et les constantes

Janvier 2013

En PHP, comme dans n'importe quel langage de programmation, on peut créer des variables (entiers, chaines de caractère, booléens...), simplement en écrivant un dollar avant le nom, ex: $variable = 10.

Mais il existe un autre moyen de stocker une information en mémoire : les constantes.

Pour déclarer une constante, il faut utiliser la fonction define :

<?php
define('DB_HOST', 'localhost');
define('APP_ROOT', dirname(__FILE__));
define('NB_RESULT_PAGE', 50);

echo DB_HOST;
echo NB_RESULT_PAGE + 10;
?>

Comme vous pouvez le voir, on peut utiliser une constante un peu comme on utilise une variable, sauf qu'on ne met jamais de $ devant.

Mais les constantes ont d'autres propriétés :

  • Elles n'ont pas de scope et sont accessibles de partout (à l'intérieur d'une fonction, d'une méthode de classe...) sans avoir besoin de déclarer le scope global avant de l'utiliser, comme on doit le faire avec les variables globales grâce au mot clé global.
  • Elles ne peuvent pas être modifiées après leur création, on ne peut pas redéfinir une constante. Comme son nom l'indique, une constante est constante, elle ne change pas.
  • Une constante ne peut contenir que des valeurs scalaires (integer, float, boolean, et string), et en aucun cas de type composé. Ainsi, on ne peut pas stocker un array ou un object dans une constante.

En général on s'en sert pour définir des paramètres importants dans une application PHP, comme dans les fichiers de configuration.

Les constantes de classe

define permet de définir une constante "globale". Mais il est aussi possible de déclarer une constante à l'intérieur d'une classe grâce à l'instruction const :

<?php
class Chiffrement {
	const cipher = MCRYPT_RIJNDAEL_128;
	const key    = 'La blanquette est bonne';
	const mode   = 'cbc';
}
?>

Cette page peut vous intéresser : validation de la valeur d'une cellule excel à lire tout de suite !

Pour accéder à une constante de classe, il faut ajouter le nom de la classe suivi de l'opérateur de résolution de portée puis enfin du nom de la constante :

<?php
echo Chiffrement::key;
?>

Les constantes de classe sont par exemple utilisées par PDO pour définir le fetch mode notamment :

<?php
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
?>

Découvrez ce tutoriel photoshop : photomontage "my cat is chouette" à lire tout de suite !

1 commentaire :
commentaire n°3432 par dodo
dodo lundi 2 janvier 2017, 12:02
En fait on peut stocker un array dans une constante, il suffit de jouer avec serialize() :

$array = array( array('fr','xxx','thisisatest',123456), array('fr','yyy','thisisatest',456789));

define('COMPTES_ANKAMA',serialize($array));
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré