Tengo varios CONST definidos en algunas clases y quiero obtener una lista de ellos. Por ejemplo:
class Profile {
const LABEL_FIRST_NAME = "First Name";
const LABEL_LAST_NAME = "Last Name";
const LABEL_COMPANY_NAME = "Company";
}
¿Hay alguna forma de obtener una lista de los CONST definidos en la Profile
clase? Por lo que puedo decir, la opción más cercana ( get_defined_constants()
) no funcionará.
Lo que realmente necesito es una lista de los nombres constantes, algo como esto:
array('LABEL_FIRST_NAME',
'LABEL_LAST_NAME',
'LABEL_COMPANY_NAME')
O:
array('Profile::LABEL_FIRST_NAME',
'Profile::LABEL_LAST_NAME',
'Profile::LABEL_COMPANY_NAME')
O incluso:
array('Profile::LABEL_FIRST_NAME'=>'First Name',
'Profile::LABEL_LAST_NAME'=>'Last Name',
'Profile::LABEL_COMPANY_NAME'=>'Company')
php
constants
class-constants
Brock Boland
fuente
fuente
Respuestas:
Puedes usar Reflection para esto. Tenga en cuenta que si está haciendo esto mucho, es posible que desee ver el resultado en caché.
Salida:
fuente
Profile
pueden usarse como argumento para el constructor del reflector, sin comillas (un nombre de clase simple); segundo, para ser completamente claros, las claves de la matriz resultante son cadenas, no constantes, ya que el formato aquí podría tomarse para sugerir. (Vale la pena mencionarlo solo porque el fn no está documentado .)Profile
sin las comillas, ya que mostrará el siguiente error: Aviso: Uso de perfil constante indefinido - supuesto 'Perfil'. Así que sugiero mantener las citas'Profile'
__CLASS__
.new ReflectionClass(Profile::class)
funciona bien tambiénCity
con claseB
:B::class
funcionaría bien, pero si los usara, por ejemplo, en el espacio de nombresJungle
, llamarB::class
allí sin incluirlouse
daría como resultadoJungle\B
(¡aunque Jungle NO tenga B en absoluto!)Esta
fuente
types
comoall constants this class has
, lo que en la mayoría de los casos, y en mi opinión limitada, probablemente sea mejor con herencia o una variable de matriz estática con los tipos (dejando espacio para constantes con otros significados / utilizar).Use token_get_all () . A saber:
Salida:
fuente
En PHP5 puede usar Reflection: (referencia manual)
fuente
Según los comentarios de los documentos de PHP, si puede usar ReflectionClass (PHP 5):
La fuente está aquí.
fuente
Usa ReflectionClass y
getConstants()
da exactamente lo que quieres:Salida:
fuente
Rasgo con método estático - al rescate
Parece que es un buen lugar para usar Rasgos con una función estática para extender la funcionalidad de la clase. Los rasgos también nos permitirán implementar esta funcionalidad en cualquier otra clase sin tener que volver a escribir el mismo código una y otra vez (manténgase SECO).
Utilice nuestro rasgo personalizado 'ConstantExport' con en la clase de perfil. Hazlo para cada clase que necesites esta funcionalidad.
EJEMPLO DE USO
SALIDAS:
fuente
Sí, usas la reflexión . Mira la salida de
Eso debería darte una idea de lo que verás.
fuente
Es útil tener un método dentro de la clase para devolver sus propias constantes.
Puedes hacerlo de esta manera:
fuente
¿Por qué no ponerlos en una variable de clase como una matriz para empezar? Facilita el bucle.
fuente
Eventualmente con espacios de nombres:
fuente
fuente