Я хочу иметь возможность динамически искать значение константы, но использование переменной не работает с синтаксисом.
<?php
class Food {
const FRUITS = 'apple, banana, orange';
const VEGETABLES = 'spinach, carrot, celery';
}
$type = 'FRUITS';
echo Food::FRUITS;
echo Food::$type;
?>
дает
apple, banana, orange
Fatal error: Access to undeclared static property: Food::$type
Как я могу динамически называть константу?
Единственное решение, которое приходит мне в голову, это использование constant
функция:
echo constant('Food::' . $type);
Здесь вы создаете имя константы, включая класс, в виде строки и передаете эту строку ('Food::FRUITS'
) чтобы constant
функция.
ReflectionClass может использоваться для получения массива всех констант, а затем значение конкретной константы можно найти оттуда:
<?php
class Food {
const FRUITS = 'apple, banana, orange';
const VEGETABLES = 'spinach, carrot, celery';
}
$type = 'FRUITS';
$refClass = new ReflectionClass('Food');
$constants = $refClass->getConstants();
echo $constants[$type];
?>