我希望能够动态查找常量的值,但使用变量并不能使用语法。
<?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
如何动态调用常量?
答案 0 :(得分:2)
我头脑中唯一的解决方案是使用constant
函数:
echo constant('Food::' . $type);
在这里,您可以创建一个常量的名称(包括类)作为字符串,并将此字符串('Food::FRUITS'
)传递给constant
函数。
答案 1 :(得分:1)
可以使用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];
?>
答案 2 :(得分:0)
在使用名称空间时,请确保包括名称空间,即使该名称空间已自动加载。
namespace YourNamespace;
class YourClass {
public const HELLO = 'WORLD';
}
$yourConstant = 'HELLO';
// Not working
// >> PHP Warning: constant(): Couldn't find constant YourClass::HELLO ..
constant('YourClass::' . $yourConstant);
// Working
constant('YourNamespace\YourClass::' . $yourConstant);```
答案 3 :(得分:0)
您可以创建关联数组
class Constants{
const Food = [
"FRUITS " => 'apple, banana, orange',
"VEGETABLES" => 'spinach, carrot, celery'
];
}
和这样的访问值
$type = "FRUITS";
echo Constants::Food[$type];