我们试图从
获取变量的名称,即“ClassName :: CLASSCONSTANT”$this->TestFunction(ClassName::CLASSCONSTANT);
功能是这样的:
function TestFunction() {
func_get_args();
// need ClassName::CLASSCONTANT as a string instead of its value
...
...
}
答案 0 :(得分:1)
不要混合数据和元数据
这是一种反模式。无论你为什么需要这个 - 你总能避免这样的解决方案。这是一种不好的做法 - 尝试按数据检索元数据。在您的特定情况下 - 您怎么知道 - 可能有多个名称空间具有相同的类并且在其中定义了常量?或者可能在同一个类中甚至有不同的常量具有相同的值。
所以 - 你不能通过传递值来检索通常情况下的类名和常量名。因此,您应该隐式传递或重新考虑应用程序的结构。
但是,您可以执行以下操作:
class Foo
{
const A = 'ksdhfsdkjf';
const B = 'jkwjnsdf';
}
class Bar
{
const A = '2384sdkfj';
}
function baz($value)
{
$result = null;
foreach(get_declared_classes() as $class)
{
if(false !== ($const=array_search($value, (new ReflectionClass($class))->getConstants(), 1)))
{
$result = ['class'=>$class, 'const'=>$const];
break;
}
}
var_dump($result);
}
baz('jkwjnsdf');//array(2) { ["class"]=> string(3) "Foo" ["const"]=> string(1) "B" }
- 但我绝对不会建议在任何情况下使用。