Ich würde gerne so etwas machen können:
class ThingIDs
{
const Something = 1;
const AnotherThing = 2;
}
$thing = 'Something';
$id = ThingIDs::$thing;
Das funktioniert nicht. Gibt es eine einfache Möglichkeit, etwas Äquivalentes zu tun? Beachten Sie, dass ich mit der Klasse festgefahren bin; Es befindet sich in einer Bibliothek, die ich nicht umschreiben kann. Ich schreibe Code, der Argumente in der Befehlszeile akzeptiert, und ich möchte wirklich , dass symbolische Namen anstelle von ID-Nummern verwendet werden.
php
class-constants
Ben
quelle
quelle
ThingIDs::{$thing}
?Antworten:
$id = constant("ThingIDs::$thing");
http://php.net/manual/en/function.constant.php
quelle
defined("ThingIDs::$thing");
$id = constant(sprintf('%s::%s', ThingIDs::class, $thing));
use
oben in der Datei und die anschließende Verwendung der::class
Methode zum magischen Abrufen des vollqualifizierten Domänennamens wird die Lesbarkeit verbessert.Verwenden Sie Reflexion
quelle
Wenn Sie Namespaces verwenden, sollten Sie den Namespace in die Klasse aufnehmen.
quelle
quelle
Hilfsfunktion
Sie können eine Funktion wie diese verwenden:
Es braucht zwei Argumente:
Wenn eine Objektinstanz übergeben wird, wird ihr Klassenname abgeleitet. Wenn Sie PHP 7 verwenden, können Sie verwenden
::class
entsprechenden Klassennamen übergeben, ohne an Namespaces denken zu müssen.Beispiele
quelle
Wenn Sie einen Verweis auf die Klasse selbst haben, können Sie Folgendes tun:
quelle
Mein Problem war diesem Thema ähnlich. Wenn Sie das Objekt, aber nicht den Klassennamen haben, können Sie Folgendes verwenden:
quelle