如何获取常量的名称?

2022-08-30 09:20:09

假设您在一个类中定义了一个常量:

class Foo {
    const ERR_SOME_CONST = 6001;

    function bar() {
        $x = 6001;
        // need to get 'ERR_SOME_CONST'
    }
}

PHP可以吗?


答案 1

您可以使用反射 API 获取它们

我假设您希望根据变量的值(变量的值==常量的值)获取常量的名称。获取类中定义的所有常量,循环访问它们,并将这些常量的值与变量的值进行比较。请注意,使用此方法,如果有两个具有相同值的常量,则可能会获得所需的其他常量。

例:

class Foo {
    const ERR_SOME_CONST = 6001;
    const ERR_SOME_OTHER_CONST = 5001;

    function bar() {
        $x = 6001;
        $fooClass = new ReflectionClass ( 'Foo' );
        $constants = $fooClass->getConstants();

        $constName = null;
        foreach ( $constants as $name => $value )
        {
            if ( $value == $x )
            {
                $constName = $name;
                break;
            }
        }

        echo $constName;
    }
}

ps:你介意告诉为什么你需要这个,因为它看起来很不寻常...


答案 2

以下是我为实现它所做的。灵感来自扬·汉西奇。

class ErrorCode
{
    const COMMENT_NEWCOMMENT_DISABLED = -4;
    const COMMENT_TIMEBETWEENPOST_ERROR = -3;
    /**
     * Get error message of a value. It's actually the constant's name
     * @param integer $value
     * 
     * @return string
     */
    public static function getErrorMessage($value)
    {
        $class = new ReflectionClass(__CLASS__);
        $constants = array_flip($class->getConstants());

        return $constants[$value];
    }
}

推荐