2017-07-20 1 views
0

Ich suche nach einer Möglichkeit zu wissen, ob die an eine Methode übergebenen Parameter eine Konstante sind, die in einer bestimmten Klasse definiert ist. Zum Beispiel:Überprüfen Sie, ob die an eine Methode übergebenen Parameter eine der in einer Klasse definierten Konstanten sind.

class MyClass { 
    const CONSTANT = 4; 
    const ANOTHER_CONSTANT = 5; 

    public function aMethod ($a_CONSTANT) { 
     // function code 
    } 
} 

$myClass = new MyClass(); 
$myClass->aMethod(MyClass::CONSTANT); // Fine 
$myClass->aMethod(MyClass::ANOTHER_CONSTANT) ; // Still okay 
$myClass->aMethod(4); // Not okay 
$myClass->aMethod(OtherClass::VALUE); // No way 

In dem obigen Code, zunächst zwei Anrufe aMethod akzeptabel sind, aber ich mag der Parser einen Fehler zu geben, während der dritte und vierte Aufruf aMethod geschieht, da die zu aMethod gebene Wert nicht a Konstante einer bestimmten Klasse (MyClass, in diesem Fall). Gibt es eine Syntax, um den Parameter in aMethod einzugeben, um zu erreichen, was ich will?

+1

Nein. Sie müssen den übergebenen Wert anhand dieser Konstanten manuell überprüfen. Eine Konstante ist nur ein Container für einen Wert. Wenn Sie eine Konstante an eine Methode übergeben, wird nur der Wert übergeben. Die Klasse hat keine Ahnung, und sollte auch nicht, woher dieser Wert im äußeren Bereich kam. Es geht nur um den tatsächlichen Wert. –

Antwort

1

Wenn Sie "eine Konstante" übergeben, übergeben Sie die Konstante nicht selbst, Sie übergeben ihren Wert. MyClass::CONSTANT und 4 sind auch genau. Es gibt keinen Unterschied zwischen ihnen, den Sie erkennen könnten. Tatsächlich ersetzt der Compiler alle Erwähnungen von "MyClass::CONSTANT" durch 4 zur Kompilierungszeit. Das sind die Konstanten.

+0

Hey danke! Ich wollte das nur auf Konstanten und keinen fest codierten Wert beschränken, so dass sich der neue Wert bei der Änderung von Konstanten automatisch an allen Stellen widerspiegelt, an denen er verwendet wurde. –

+0

Ja, eine gute Sache, aber leider gibt es nichts in der Sprache, das dir helfen könnte. Vielleicht existiert ein Style-Checker, der zu diesem Zweck einige Kommentar-Annotationen parsen könnte, aber ich weiß es nicht. – deceze

+0

Ja! Wenn ich eine Klasse 'OtherClass' mit einer Konstante definiere, sagen wir' OC_CONSTANT', die den Wert 4 oder 5 speichert, dann kann ich im obigen Code 'aMethod' folgendermaßen aufrufen:' $ myClass-> aMethod (OtherClass :: OC_CONSTANT) ' und es wird identisch funktionieren, wenn eine Konstante von 'MyClass' übergeben wird. –

Verwandte Themen