Constante de classes, faisons le point.

ViPHP
ViPHP | 4674 Messages

16 juin 2007, 15:41

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.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

16 juin 2007, 18:46

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.

ViPHP
ViPHP | 4674 Messages

16 juin 2007, 19:39

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
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).