检查传递给方法的参数是否是 class 中定义的常量之一?
Check if the parameters passed to a method is one of the constants defined in a class?
我正在寻找一种方法来了解传递给方法的参数是否是特定 class 中定义的常量。例如:
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
在上面的代码中,前两次调用 aMethod
是可以接受的,但我希望解析器在第三次和第四次调用 aMethod
时给出错误,因为传递给 aMethod
不是特定 class 的常量(在本例中为 MyClass
)。是否有一种语法可以在 aMethod
中输入提示参数来实现我想要的?
当您传递 "a constant" 时,您传递的不是常量本身,而是它的值。 MyClass::CONSTANT
和 4
完全是同义词。您可以检测到它们之间没有区别。事实上,编译器会在编译时用 4
替换所有提及的“MyClass::CONSTANT
”。这就是常量。
我正在寻找一种方法来了解传递给方法的参数是否是特定 class 中定义的常量。例如:
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
在上面的代码中,前两次调用 aMethod
是可以接受的,但我希望解析器在第三次和第四次调用 aMethod
时给出错误,因为传递给 aMethod
不是特定 class 的常量(在本例中为 MyClass
)。是否有一种语法可以在 aMethod
中输入提示参数来实现我想要的?
当您传递 "a constant" 时,您传递的不是常量本身,而是它的值。 MyClass::CONSTANT
和 4
完全是同义词。您可以检测到它们之间没有区别。事实上,编译器会在编译时用 4
替换所有提及的“MyClass::CONSTANT
”。这就是常量。