Get value of dynamically chosen class constant in PHP

前端 未结 8 1202
无人共我
无人共我 2020-11-29 03:38

I would like to be able to do something like this:

class ThingIDs
{
    const Something = 1;
    const AnotherThing = 2;
}

$thing = \'Something\';
$id = Thi         


        
8条回答
  •  没有蜡笔的小新
    2020-11-29 04:16

    I know I'm a bit late, but I hope this can help anyway.

    Based on Phil's answer, I created a default enumerator class that can be extended.

    class DefaultEnum
    {
        static public function getConstantText(string $constant)
        {
            try {
                // Get child class name that called this method
                $child_class = get_called_class();
    
                $reflection = new ReflectionClass($child_class);
                $const = $reflection->getConstant($constant);
    
                return $const;
            } catch (\ReflectionException $e) {
                // ...
            }
        }
    }
    
    class CustomEnum extends DefaultEnum
    {
        const something = 'abcd';
        const something2 = 'ABCD';
    }
    

    You can call this method like this

    CustomEnum::getConstantText('something');
    

    It will return 'abcd'.

    The function get_called_class() is a function that returns the class name that called this method and it works specifically for static methods.

    In this case $child_class value will be CustomEnum::class. ReflectionClass accepts strings and object as parameter.

提交回复
热议问题