Получить значение динамически выбранной константы класса в PHP

Я хотел бы иметь возможность сделать что-то вроде этого:

class ThingIDs { const Something = 1; const AnotherThing = 2; } $thing = 'Something'; $id = ThingIDs::$thing; 

Это не работает. Есть ли простой способ сделать что-то эквивалентное? Обратите внимание, что я застрял в классе; это в библиотеке, которую я не могу переписать. Я пишу код, который принимает аргументы в командной строке, и мне бы очень хотелось, чтобы вместо символических имен вместо символьных чисел использовались символические имена.

Solutions Collecting From Web of "Получить значение динамически выбранной константы класса в PHP"

$id = constant("ThingIDs::$thing");

http://php.net/manual/en/function.constant.php

Использовать отражение

 $r = new ReflectionClass('ThingIDs'); $id = $r->getConstant($thing); 

Если вы используете пространства имен, вы должны включить пространство имен с классом.

 echo constant('My\Application\ThingClass::ThingConstant'); 
 <?php class Dude { const TEST = 'howdy'; } function symbol_to_value($symbol, $class){ $refl = new ReflectionClass($class); $enum = $refl->getConstants(); return isset($enum[$symbol])?$enum[$symbol]:false; } // print 'howdy' echo symbol_to_value('TEST', 'Dude'); 

Если у вас есть ссылка на сам класс, вы можете сделать следующее:

 if (defined(get_class($course). '::COURSES_PER_INSTANCE')) { // class constant is defined }