Ich habe eine Zeichenfolge, die den Klassennamen enthält, und ich möchte eine Konstante erhalten und eine (statische) Methode von dieser Klasse aufrufen.
%Vor% Wie ich (mehr oder weniger) erwartet habe, funktioniert die Verwendung von $variable::CONSTANT
oder $variable::method();
nicht.
Bevor ich frage, was ich versucht habe; Ich habe so viele Dinge ausprobiert, die ich im Grunde vergessen habe.
Was ist der beste Ansatz dafür? Vielen Dank im Voraus.
Um auf die Konstante zuzugreifen, verwenden Sie constant()
:
Hinweis: Wenn Sie mit Namespaces arbeiten, müssen Sie Ihren Namespace speziell zur Zeichenfolge hinzufügen, auch wenn Sie constant()
aus demselben Namespace aufrufen!
Für den Anruf müssen Sie call_user_func()
verwenden:
Allerdings: Das ist alles nicht sehr effizient, daher sollten Sie vielleicht einen anderen Blick auf Ihr Objekthierarchiedesign werfen. Es könnte einen besseren Weg geben, um das gewünschte Ergebnis zu erreichen, indem man Vererbung usw. verwendet.
Sie können es erreichen, indem Sie eine temporäre Variable setzen. Nicht der eleganteste Weg, aber es funktioniert.
%Vor% Ich vermute, dass es mit der Mehrdeutigkeit von ::
zu tun hat, zumindest was die Fehlermeldung anzeigt ( PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
)
Klassen, die als abstrakt definiert sind, dürfen nicht instanziiert werden, und jede Klasse, die mindestens eine abstrakte Methode enthält, muss ebenfalls abstrakt sein. Als Abstract definierte Methoden deklarieren einfach die Signatur der Methode - sie können die Implementierung nicht definieren.
Beim Erben von einer abstrakten Klasse müssen alle Methoden, die in der Klassendeklaration der Eltern als abstrakt gekennzeichnet sind, vom Kind definiert werden; Außerdem müssen diese Methoden mit derselben (oder weniger eingeschränkten) Sichtbarkeit definiert werden. Wenn die abstrakte Methode beispielsweise als geschützt definiert ist, muss die Funktionsimplementierung entweder als geschützt oder öffentlich, aber nicht privat definiert sein. Außerdem müssen die Signaturen der Methoden übereinstimmen, d. H. Die Typhinweise und die Anzahl der erforderlichen Argumente müssen übereinstimmen. Dies gilt auch für Konstruktoren ab PHP 5.4. Vor 5.4 Konstruktorsignaturen können sich unterscheiden. Siehe Ссылка