Ich habe mehrere CONSTs für einige Klassen definiert und möchte eine Liste von ihnen erhalten. Beispielsweise:
class Profile {
const LABEL_FIRST_NAME = "First Name";
const LABEL_LAST_NAME = "Last Name";
const LABEL_COMPANY_NAME = "Company";
}
Gibt es eine Möglichkeit, eine Liste der in der Profile
Klasse definierten CONSTs zu erhalten ? Soweit ich das beurteilen kann, reicht die nächstgelegene Option ( get_defined_constants()
) nicht aus.
Was ich eigentlich brauche, ist eine Liste der konstanten Namen - so etwas wie das:
array('LABEL_FIRST_NAME',
'LABEL_LAST_NAME',
'LABEL_COMPANY_NAME')
Oder:
array('Profile::LABEL_FIRST_NAME',
'Profile::LABEL_LAST_NAME',
'Profile::LABEL_COMPANY_NAME')
Oder auch:
array('Profile::LABEL_FIRST_NAME'=>'First Name',
'Profile::LABEL_LAST_NAME'=>'Last Name',
'Profile::LABEL_COMPANY_NAME'=>'Company')
php
constants
class-constants
Brock Boland
quelle
quelle
Antworten:
Sie können hierfür Reflection verwenden . Beachten Sie, dass Sie, wenn Sie dies häufig tun, möglicherweise das Zwischenspeichern des Ergebnisses prüfen möchten.
Ausgabe:
quelle
Profile
das Argument für den Reflektorkonstruktor ohne Anführungszeichen (ein einfacher Klassenname) verwendet werden. Zweitens, um ganz klar zu sein, sind die Schlüssel des resultierenden Arrays Zeichenfolgen und keine Konstanten, wie die Formatierung hier vermuten lässt. (Erwähnenswert nur, da das fn nicht dokumentiert ist .)Profile
ohne Anführungszeichen nicht verwenden, da der folgende Fehler angezeigt wird: Hinweis: Verwendung eines undefinierten konstanten Profils - angenommenes 'Profil'. Also schlage ich vor, die Anführungszeichen'Profile'
__CLASS__
stattdessen verwenden müssen.new ReflectionClass(Profile::class)
funktioniert auch gutCity
mit KlasseB
- esB::class
würde gut funktionieren, aber wenn Sie diese im zB Namespace verwenden würdenJungle
- würde ein AufrufB::class
ohne Namespaceuse
dazu führenJungle\B
(obwohl Jungle überhaupt kein B hat!)Dies
quelle
types
as festlegtall constants this class has
, was in den meisten Fällen und meiner Meinung nach besser mit Vererbung oder einer statischen Arrayvariablen mit den Typen bedient werden kann (wobei Platz für Konstanten mit anderen Bedeutungen bleibt /). verwenden).Verwenden Sie token_get_all () . Nämlich:
Ausgabe:
quelle
In PHP5 können Sie Reflection verwenden: (manuelle Referenz)
quelle
Wenn Sie die ReflectionClass (PHP 5) verwenden können, lesen Sie die Kommentare in den PHP-Dokumenten:
Quelle ist hier.
quelle
Verwenden Sie ReflectionClass und
getConstants()
geben Sie genau das, was Sie wollen:Ausgabe:
quelle
Merkmal mit statischer Methode - zur Rettung
Sieht so aus, als wäre es ein guter Ort, um Merkmale mit einer statischen Funktion zu verwenden, um die Klassenfunktionalität zu erweitern. Mit Traits können wir diese Funktionalität auch in jeder anderen Klasse implementieren, ohne denselben Code immer wieder neu schreiben zu müssen (bleiben Sie trocken).
Verwenden Sie unser benutzerdefiniertes 'ConstantExport'-Merkmal mit in der Profilklasse. Tun Sie dies für jede Klasse, für die Sie diese Funktionalität benötigen.
VERWENDUNGSBEISPIEL
AUSGÄNGE:
quelle
Ja, du benutzt Reflexion . Schauen Sie sich die Ausgabe von an
Das sollte Ihnen eine Vorstellung davon geben, was Sie sehen werden.
quelle
Es ist praktisch, eine Methode in der Klasse zu haben, um ihre eigenen Konstanten zurückzugeben.
Sie können dies folgendermaßen tun:
quelle
Warum setzen Sie sie nicht zunächst als Array in eine Klassenvariable? Erleichtert das Durchschleifen.
quelle
Eventuell mit Namespaces:
quelle
quelle