2009-05-15 13 views
2

J'ai une classe de base de données qui établit automatiquement une connexion à la base de données et effectue un filtrage d'entrée de base et ainsi de suite. Je cherche à définir des constantes prédéfinies pour ajuster le comportement des méthodes de classe. Que dois-je définir comme valeurs des constantes? Puisque les valeurs ne seront jamais référencées ou comparées directement, mais seulement dans le contexte du nom de la constante, est-ce que la valeur importe?Définition des constantes prédéfinies en tant que

Une stratégie que j'ai rencontrée est la définition d'une constante à une valeur de bit afin que les opérateurs bit à bit peuvent être utilisés pour combiner des constantes. Dans ce cas, il ne semble pas que cette fonctionnalité sera nécessaire, mais on ne sait jamais.

Souvent, je reçois des messages comme

Notice: Use of undefined constant CONSTANT_VALUE - assumed 'CONSTANT_VALUE' 

Est-ce le traitement de la constante comme 'CONSTANT _ VALEUR' ou de la valeur CONSTANT _ constante la chaîne? Dois-je définir la valeur de mes constantes comme des chaînes du même nom pour compenser cela? Cela se produit lorsque j'utilise des constantes que je connais sont définies à un moment donné, comme DOCUMENT _ ROOT.

Est-ce qu'il me manque une meilleure pratique que ce soit?

+0

Lorsque PHP voit une constante non définie comme constant_value, il traite la constante comme la chaîne 'CONSTANT_VALUE' –

Répondre

2

Si vous obtenez ce message, la constante en question est et non définie au point où ce code est en cours d'exécution, et elle est traitée comme la chaîne 'CONSTANT_VALUE'.

Si les valeurs d'un ensemble de constantes que vous définissez sont complètement arbitraires et n'ont pas besoin d'être bitmaskables, utilisez la séquence d'entiers positifs.

+0

qu'en est-il de l'exemple de $ _SERVER [DOCUMENT_ROOT]? Je suppose que c'est une valeur définie, mais je reçois l'avis et cela fonctionne. DOCUMENT_ROOT est-il une constante définie réelle? –

+1

Mmm no. C'est $ _SERVER ['DOCUMENT_ROOT']. DOCUMENT_ROOT n'est pas une constante du tout. La seule raison pour laquelle cela fonctionne quand vous faites $ _SERVER [DOCUMENT_ROOT] est à cause du basculement vers une valeur de chaîne dont il est question dans cet avertissement. Le basculement est une tentative de compenser le codage incompétent, pas une fonctionnalité de langue prise en charge, c'est pourquoi il émet un avertissement. – chaos

0

Si les constantes ne vont pas être utilisés en dehors de la classe de base de données que vous ne avez pas besoin de définir des constantes globales, vous pouvez utiliser des constantes de classe:

http://uk.php.net/manual/en/language.oop5.constants.php

+0

bien qu'ils seront utilisés par d'autres scripts appelant des fonctions de base de données. c'est-à-dire $ database-> action ($ values, CONSTANT_VALUE). Les fonctions de classe seraient-elles appelables comme $ database-> action ($ values, DbClass :: CONSTANT_VALUE)? –

+0

Oui. Consultez le manuel ici: http://uk2.php.net/manual/fr/language.oop5.constants.php – palako

Questions connexes