Eu tenho vários CONSTs definidos em algumas classes e quero obter uma lista delas. Por exemplo:
class Profile {
const LABEL_FIRST_NAME = "First Name";
const LABEL_LAST_NAME = "Last Name";
const LABEL_COMPANY_NAME = "Company";
}
Existe alguma maneira de obter uma lista dos CONSTs definidos na Profile
classe? Até onde eu sei, a opção mais próxima ( get_defined_constants()
) não funciona.
O que eu realmente preciso é de uma lista dos nomes constantes - algo como isto:
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 até:
array('Profile::LABEL_FIRST_NAME'=>'First Name',
'Profile::LABEL_LAST_NAME'=>'Last Name',
'Profile::LABEL_COMPANY_NAME'=>'Company')
php
constants
class-constants
Brock Boland
fonte
fonte
Respostas:
Você pode usar o Reflection para isso. Observe que, se você estiver fazendo isso muito, poderá querer armazenar em cache o resultado.
Resultado:
fonte
Profile
podem ser usados como argumento para o construtor refletor, sem aspas (um nome simples de classe); segundo, para ficar completamente claro, as chaves da matriz resultante são cadeias de caracteres, não constantes, como a formatação aqui pode sugerir. (Vale a pena mencionar apenas como o fn é não documentada .)Profile
sem as aspas, pois mostrará o seguinte erro: Aviso: Uso de perfil constante indefinido - assumido 'Perfil'. Então, sugiro manter as aspas'Profile'
__CLASS__
.new ReflectionClass(Profile::class)
funciona bem tambémCity
com classeB
-B::class
ele funcionaria bem, mas se você os usasse, por exemplo, namespaceJungle
- a chamada paraB::class
lá sem incluí-louse
resultaria emJungle\B
(mesmo que o Jungle NÃO tenha B de todo!)este
fonte
types
comoall constants this class has
, que na maioria dos casos, e na minha opinião limitada concedida, provavelmente é melhor servido com herança ou uma variável de matriz estática com os tipos (deixando espaço para constantes com outros significados / usar).Use token_get_all () . Nomeadamente:
Resultado:
fonte
No PHP5, você pode usar o Reflection: (referência manual)
fonte
Pelos comentários dos documentos do PHP, se você pode usar o ReflectionClass (PHP 5):
A fonte está aqui.
fonte
Usando ReflectionClass e
getConstants()
fornece exatamente o que você deseja:Resultado:
fonte
Traço com método estático - para o resgate
Parece que é um bom lugar para usar Traits com uma função estática para estender a funcionalidade da classe. As características também nos permitem implementar essa funcionalidade em qualquer outra classe sem reescrever o mesmo código repetidamente (fique seco).
Use nossa característica 'ConstantExport' personalizada na classe Profile. Faça isso para todas as turmas que você precisar dessa funcionalidade.
EXEMPLO DE USO
SAÍDAS:
fonte
Sim, você usa reflexão . Veja a saída de
Isso deve lhe dar a idéia do que você estará vendo.
fonte
É útil ter um método dentro da classe para retornar suas próprias constantes.
Você pode fazer desta maneira:
fonte
Por que não colocá-los em uma variável de classe como uma matriz para começar? Facilita o loop.
fonte
Eventualmente com namespaces:
fonte
fonte