Mam kilka zdefiniowanych parametrów CONST dla niektórych klas i chcę uzyskać ich listę. Na przykład:
class Profile {
const LABEL_FIRST_NAME = "First Name";
const LABEL_LAST_NAME = "Last Name";
const LABEL_COMPANY_NAME = "Company";
}
Czy jest jakiś sposób, aby uzyskać listę CONST zdefiniowanych w Profile
klasie? O ile wiem, najbliższa opcja ( get_defined_constants()
) nie załatwi sprawy.
To, czego potrzebuję, to lista stałych nazw - coś takiego:
array('LABEL_FIRST_NAME',
'LABEL_LAST_NAME',
'LABEL_COMPANY_NAME')
Lub:
array('Profile::LABEL_FIRST_NAME',
'Profile::LABEL_LAST_NAME',
'Profile::LABEL_COMPANY_NAME')
Lub nawet:
array('Profile::LABEL_FIRST_NAME'=>'First Name',
'Profile::LABEL_LAST_NAME'=>'Last Name',
'Profile::LABEL_COMPANY_NAME'=>'Company')
php
constants
class-constants
Brock Boland
źródło
źródło
Odpowiedzi:
Możesz do tego użyć Reflection . Zauważ, że jeśli robisz to dużo, możesz chcieć spojrzeć na buforowanie wyniku.
Wynik:
źródło
Profile
można użyć jako argumentu konstruktora reflektora, bez cudzysłowów (prosta nazwa klasy); po drugie, dla pełnej jasności, klucze wynikowej tablicy są łańcuchami, a nie stałymi, jak sugeruje to formatowanie. (Warto wspomnieć tylko, że fn nie jest udokumentowane .)Profile
bez cudzysłowów, ponieważ pokaże następujący błąd: Uwaga: użycie niezdefiniowanej stałej Profil - zakładany „Profil”. Dlatego proponuję zachować cytaty'Profile'
__CLASS__
zamiast tego użyj .new ReflectionClass(Profile::class)
też działa dobrzeCity
z klasąB
-B::class
działałaby dobrze, ale gdybyś użył ich np. W przestrzeni nazwJungle
- wywołanieB::class
tam bezuse
Jungle\B
To
źródło
types
jakoall constants this class has
, które w większości przypadków i moim ograniczonym zdaniem są prawdopodobnie lepiej obsługiwane przez dziedziczenie lub statyczną zmienną tablicową z typami (pozostawiając miejsce na stałe o innym znaczeniu / posługiwać się).Użyj token_get_all () . Mianowicie:
Wynik:
źródło
W PHP5 możesz użyć Reflection: (podręcznik)
źródło
Zgodnie z komentarzami w dokumentacji PHP, jeśli możesz użyć klasy ReflectionClass (PHP 5):
Źródło jest tutaj.
źródło
Używając ReflectionClass i
getConstants()
daje dokładnie to, czego chcesz:Wynik:
źródło
Cecha metodą statyczną - na ratunek
Wygląda na to, że jest to przyjemne miejsce do używania cech z funkcją statyczną w celu rozszerzenia funkcjonalności klasy. Cechy pozwolą nam również zaimplementować tę funkcjonalność w dowolnej innej klasie bez przepisywania w kółko tego samego kodu (pozostań DRY).
Użyj naszej niestandardowej cechy „ConstantExport” w klasie profilu. Zrób to dla każdej klasy, na której potrzebujesz tej funkcjonalności.
PRZYKŁAD UŻYCIA
WYJŚCIA:
źródło
Tak, używasz refleksji . Spójrz na wynik
To powinno dać ci wyobrażenie o tym, na co będziesz patrzeć.
źródło
Przydatne jest posiadanie metody wewnątrz klasy zwracającej własne stałe.
Możesz to zrobić w ten sposób:
źródło
Dlaczego nie umieścić ich w zmiennej klasy jako tablicy? Ułatwia wykonywanie pętli.
źródło
Ostatecznie z przestrzeniami nazw:
źródło
źródło