Ich bin fest mit einem Problem, das ich dachte, war leicht gelöst, aber mit einem Verlust. Ich habe eine abstrakte Klasse, die mehrere Konstanten hat, die Zeitinkremente definieren, die ungefähr so aussehen.PHP Zugriff auf Konstanten dynamisch von abstrakten Klasse
abstract class DictionaryKeepAliveIncrements{
CONST second = 1;
CONST quarterminute = 15;
CONST halfminute = 30;
CONST minute = 60;
Ich versuche, sie von einer anderen Klasse dynamisch zuzugreifen wie so
public function getKeepAliveByUnit($timeUnit){
return constant('DictionaryKeepAliveIncrements::'.$timeUnit);
}
Dies wird in dem Fehler resultierende
Warnung: constant(): nicht gefunden Konstante DictionaryKeepAliveIncrements :: Minute in
Die DictionaryKeepAliveIncrements ist im gleichen Namespace wie die Methode getKeepAliveByUnit so sollte es sehen. Ich habe auch versucht, den vollen Namensraum hinzuzufügen, aber das gleiche Ergebnis zu erhalten.
Was fehlt mir?
Rufst du 'Sache- $> getKeepAliveByUnit ('zweiten');' statt nur Zugriff auf 'DictionaryKeepAliveIncrements :: second'? Sie scheinen hier die Dinge massiv zu überkomprimieren ... –
Ja, ich rufe '$ instance-> getKeepAliveByUnit ('week')' Ich muss mit Legacy-Code umgehen, bei dem Konfigurationsoptionen in anderen Teilen des Codes dynamisch gesetzt werden und dann durchgegangen. Ansonsten würde ich es mit 'DictionaryKeepAliveIncrements :: minute' fest codieren, wo es benötigt wird. – SeaFuzz
Gibt es eine abgeleitete Klasse aus dieser abstrakten Klasse, die überhaupt instanziiert wurde? Ich frage mich, ob die Konstanten, da sie Teil eines Abstracts sind, vielleicht nicht definiert wurden, wenn nichts Abstraktes verwendet. Wenn Sie das Schlüsselwort "abstract" entfernen, funktioniert es? – Graeme