J'ai plusieurs CONST définis sur certaines classes et je veux en obtenir une liste. Par exemple:
class Profile {
const LABEL_FIRST_NAME = "First Name";
const LABEL_LAST_NAME = "Last Name";
const LABEL_COMPANY_NAME = "Company";
}
Existe-t-il un moyen d'obtenir une liste des CONST définis sur la Profile
classe? Pour autant que je sache, l'option la plus proche ( get_defined_constants()
) ne fera pas l'affaire.
Ce dont j'ai réellement besoin est une liste des noms constants - quelque chose comme ceci:
array('LABEL_FIRST_NAME',
'LABEL_LAST_NAME',
'LABEL_COMPANY_NAME')
Ou:
array('Profile::LABEL_FIRST_NAME',
'Profile::LABEL_LAST_NAME',
'Profile::LABEL_COMPANY_NAME')
Ou même:
array('Profile::LABEL_FIRST_NAME'=>'First Name',
'Profile::LABEL_LAST_NAME'=>'Last Name',
'Profile::LABEL_COMPANY_NAME'=>'Company')
php
constants
class-constants
Brock Boland
la source
la source
Réponses:
Vous pouvez utiliser Reflection pour cela. Notez que si vous faites beaucoup cela, vous voudrez peut-être regarder la mise en cache du résultat.
Production:
la source
Profile
peut être utilisé comme argument du constructeur du réflecteur, sans guillemets (un simple nom de classe); deuxièmement, pour être tout à fait clair, les clés du tableau résultant sont des chaînes, pas des constantes comme le formatage ici pourrait être supposé. (À mentionner uniquement car la fn n'est pas documentée .)Profile
sans les guillemets, car il affichera l'erreur suivante: Remarque: Utilisation d'un profil constant non défini - supposé «Profil». Je suggère donc de garder les citations'Profile'
__CLASS__
place.new ReflectionClass(Profile::class)
fonctionne bien aussiCity
de noms avec classB
-B::class
cela fonctionnerait bien, mais si vous les utilisiez dans l'espace de noms par exempleJungle
- appelerB::class
là sans l'inclure avecuse
entraîneraitJungle\B
(même si Jungle n'a PAS du tout B!)Ce
la source
types
commeall constants this class has
, qui dans la plupart des cas, et à mon avis limité, sont probablement mieux servis avec l'héritage ou une variable de tableau statique avec les types (laissant de la place pour des constantes avec d'autres significations / utilisation).Utilisez token_get_all () . À savoir:
Production:
la source
En PHP5, vous pouvez utiliser Reflection: (référence manuelle)
la source
Selon les commentaires de la documentation PHP, si vous pouvez utiliser ReflectionClass (PHP 5):
La source est ici.
la source
En utilisant ReflectionClass et
getConstants()
donne exactement ce que vous voulez:Production:
la source
Trait avec méthode statique - à la rescousse
On dirait que c'est un bon endroit pour utiliser des traits avec une fonction statique pour étendre les fonctionnalités de classe. Les traits nous permettront également d'implémenter cette fonctionnalité dans n'importe quelle autre classe sans réécrire le même code encore et encore (restez DRY).
Utilisez notre trait personnalisé 'ConstantExport' avec la classe Profile. Faites-le pour chaque classe pour laquelle vous avez besoin de cette fonctionnalité.
EXEMPLE D'UTILISATION
LES SORTIES:
la source
Ouais, vous utilisez la réflexion . Regardez la sortie de
Cela devrait vous donner une idée de ce que vous allez regarder.
la source
Il est pratique d'avoir une méthode à l'intérieur de la classe pour renvoyer ses propres constantes.
Vous pouvez faire de cette façon:
la source
Pourquoi ne pas les mettre dans une variable de classe sous forme de tableau pour commencer? Facilite la lecture en boucle.
la source
Finalement avec des espaces de noms:
la source
la source