检查传递给方法的参数是不是是类中定义的常量之一?
Posted
技术标签:
【中文标题】检查传递给方法的参数是不是是类中定义的常量之一?【英文标题】:Check if the parameters passed to a method is one of the constants defined in a class?检查传递给方法的参数是否是类中定义的常量之一? 【发布时间】:2017-12-25 18:09:51 【问题描述】:我正在寻找一种方法来了解传递给方法的参数是否是在特定类中定义的常量。例如:
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
的值不是常量特定类的(MyClass
,在这种情况下)。是否有语法来输入aMethod
中的参数以实现我想要的?
【问题讨论】:
没有。您需要根据这些常量手动检查传递的值。常量只是一个值的容器。当你将一个常量传递给一个方法时,它只是被传递的值。该类不知道,也不应该知道该值来自外部范围。一切以实际价值为准。 【参考方案1】:当您传递“一个常量”时,您不是在传递常量本身,而是在传递它的值。 MyClass::CONSTANT
和 4
完全是同义词。您可以检测到它们之间没有区别。事实上,编译器在编译时将所有提到的“MyClass::CONSTANT
”替换为4
。这就是常量。
【讨论】:
嘿,谢谢!我有点想将其限制为仅常量而不是硬编码值,以便当常量更改时,新值会自动反映到所有使用它的地方。 是的,这是一个有价值的事业,但遗憾的是,没有什么可以帮助您的语言。也许存在一些样式检查器可以为此目的解析一些注释注释,但我不知道。 是的!如果我用常量定义一个类OtherClass
,比如OC_CONSTANT
,它存储值4或5,那么在上面的代码中,我可以像这样调用aMethod
:$myClass->aMethod(OtherClass::OC_CONSTANT)
,它的工作方式与来自MyClass
的常量被传递。以上是关于检查传递给方法的参数是不是是类中定义的常量之一?的主要内容,如果未能解决你的问题,请参考以下文章