Page 1 sur 1

Constante de classes, faisons le point.

Posté : 16 juin 2007, 15:41
par Hywan
Bonjour :)

Je doute de la réelle utilisation des constantes de classes introduites dans PHP 5.
En effet, on ne peut faire aucune opération dessus, et ça me gave sérieusement.

Pour mon package File, j'utilise -- par exemple -- les constantes suivantes :

Code : Tout sélectionner

FILE_LIST_FILE = 1 FILE_LIST_DIR = 2 FILE_LIST_NODOT = FILE_LIST_FILE | FILE_LIST_DIR FILE_LIST_DOT = 4 FILE_LIST_ALL = FILE_LIST_FILE | FILE_LIST_DIR | FILE_LIST_DOT
et aussi

Code : Tout sélectionner

FILE_LOCKS_BLOCK = true FILE_LOCKS_SHARED = LOCK_SH | (FILE_LOCKS_BLOCK ? 0 : LOCK_NB FILE_LOCKS_EXCLUSIVE = LOCK_EX | (FILE_LOCKS_BLOCK ? 0 : LOCK_NB)
Par exemple. C'est très pratique.

Mais en utilisant le mot-clé : const en PHP 5, on ne peut rien faire de tout celà.
Je doute donc de la réelle utilité de ces constantes de classes ...

Je me demande si je ne vais pas déclarer ces constantes en dehors de la classe, j'aurais à y gagner.
J'aimerais donc votre opinion sur ces constantes de classes :)

Merci et bonne journée.

Posté : 16 juin 2007, 18:46
par naholyr
J'ai un peu la même opinion que toi, et j'ajouterai que je trouve très lourd visuellement l'utilisation de ces constantes dans un appel de fonction, on se retrouve avec plein de "MaClasse::" partout.

Je les utilise personnellement uniquement en interne de ma classe, comme un élément de configuration finalement. Donc j'en ai une utilisation tout-à-fait anecdotique.

Mais leur utilisation se défend tout à fait, surtout parce qu'on n'a pas besoin de se préoccuper du nom qu'on va donner à ces constantes : comme elles sont dans l'espace de nom de la classe on n'a pas de risque de collision. Par exemple pour une classe utilisateur avec des niveaux de droits, on pourrait avoir
class User {
  const GUEST = 0;
  const MEMBER = 1;
  const MODERATOR = 2;
  const ADMINISTRATOR : 3;
Et au lieu de tester sur USER_LEVEL_ADMINISTRATOR je teste sur User::ADMINISTRATOR, pour le coup c'est plus léger ;)

Donc c'est comme tout, c'est selon le besoin.

Posté : 16 juin 2007, 19:39
par Hywan
Oui mais quand j'ai Hoa_Mail_Sender_Smtp::Ma_Constante, c'est moins pratique ...

Bon je ne suis donc pas tout seul, et je rejoins ton raisonnement.

Donc tu coups, on sait jamais trop où les déclarer, c'est un peu comme on veut donc :P