Мне нужно напечатать имя константы вместо числа:
class Type
{
const UNKNOWN = 0;
const PERSON = 1;
}
У меня есть функция: entity->getType()
Которые возвращают число в этом случае 0 или 1.
Как я могу использовать PHP для преобразования const UNKNOWN или PERSON в текст, не делая этого:
$entity_types = [
0 => 'UNKNOWN',
1 => 'PERSON'];
printf('Type: %s' . PHP_EOL, $entity_types[$entity->getType()]);
Но по телефону:
Type::$entity->getType()
?
На самом деле, нет реального решения вашей проблемы. Простой пример, почему это не может работать в PHP:
const VAR1 = 1;
const VAR2 = 1;
Это полное допустимое использование констант класса, но так как есть многократное использование значения 1
нет отображения 1
на любое имя.
Возможно, есть способ использовать API отражения для возврата первой константы с совпадающим значением, но делать это в производственной среде не рекомендуется, поскольку это не очень быстро (и, как я уже говорил, также небезопасно, если вы позже измените ваш код)
Если вы хотите улучшить читабельность константных значений, вам следует подумать об использовании строковых значений как констант, а не чисел.
Других решений пока нет …