php后期静态绑定:使用反射返回static :: CONST

时间:2012-12-13 07:15:54

标签: php reflection

  

可能重复:
  Accessing a class constant using a simple variable which contains the name of the constant

我想使用反射作为静态调用的结果发送一个const数组

class ArrowType extends AbstractAttributeType
{
    const NORMAL = 'normal';
    const INV = 'inv';

    static function getPossibleValues()
    {
        $refl = new \ReflectionClass(__CLASS__);
        $class_vars = $refl->getConstants();
        $res = array();
        foreach ($class_vars as $name => $value) {
            $res[] = static::$$name;
        }

        return $res;
    }
}

这给了我

  

致命错误:访问未声明的静态属性: ArrowType :: $ NORMAL

我想得到

  

ArrowType :: NORMAL

致电 $ arrowType-> getPossibleValues()

修改

为了让我的问题更加明白,我会告诉你细节。 我正在使用https://github.com/yethee/BiplaneEnumBundle,我正在努力让我的生活更轻松。目前,我必须生成以下代码才能遵循库要求。

class ArrowType extends AbstractAttributeType
{
    const NORMAL = 'normal';
    const INV = 'inv';
    const DOT = 'dot';
    const INVDOT = 'invdot';
    const ODOT = 'odot';
    const INVODOT = 'invodot';
    const NONE = 'none';

    static function getPossibleValues()
    {
        return array(
                    static::NORMAL,
                    static::INV,
                    static::DOT,
                    static::INVDOT,
                    static::ODOT,
                    static::INVODOT,
                    static::NONE
                    );
    }

    static function getReadables()
    {
        return array(
                    static::NORMAL => 'normal',
                    static::INV => 'inv',
                    static::DOT => 'dot',
                    static::INVDOT => 'invdot',
                    static::ODOT => 'odot',
                    static::INVODOT => 'invodot',
                    static::NONE => 'none'
                );
    }

}

我现在想要实现的是,在两个函数中动态构建数组,以便将这些函数放在父类中,并在我的类中声明const部分。我希望这有助于善良的读者理解我想要的东西。

1 个答案:

答案 0 :(得分:0)

等等,等一下,等一下。

    $class_vars = $refl->getConstants();
    $res = array();
    foreach ($class_vars as $name => $value) {
        ...

已经拥有该值。它就在那里。你甚至不需要foreach。只需return $refl->getConstants()