检查方法参数是否为类常量

时间:2016-12-23 12:05:24

标签: php

目前我正在尝试为我们的模板设计人员创建一个帮助程序类,它具有最少的PHP知识,所以我想尽可能简化它。

在这个过程中,我偶然发现了一个我以前从未真正考虑过的问题:

如何检查方法调用的参数是否是已定义类常量的值?

我可以想出几种使用反射等方法来做到这一点的方法,但我想知道是否有一些方法更加简单,我忽略了。

参加以下课程:

class Foo{
  const TYPE_A = 'A';
  const TYPE_B = 'B';
  const TYPE_C = 'C';

  public static function doSomething($type){
    //Check to see if $type is indeed a class constant
  }
}

//This would work
Foo::doSomething(Foo::TYPE_A);
Foo::doSomething(Foo::TYPE_B);
Foo::doSomething(Foo::TYPE_C);
Foo::doSomething('A');
Foo::doSomething('B');
Foo::doSomething('C');

//This should fail
Foo::doSomething('BAR');

除了使用反射之外,我可以使用私有数组等,但这确实会破坏常量的目的,或者需要在几个地方更新数据。

2 个答案:

答案 0 :(得分:0)

没有反思或自定义黑客似乎不可能,所以我关闭了这个

答案 1 :(得分:-1)

您可以检查是否使用http://php.net/manual/en/function.defined.php

定义常量
  public static function doSomething($type){
    if (defined('self::' . $type)) {
      // do someting
    }
  }