我们正在尝试从获取传递的变量的名称,即"ClassName::CLASSCONSTANT"
$this->TestFunction(ClassName::CLASSCONSTANT);
功能如下:
function TestFunction() {
func_get_args();
// need ClassName::CLASSCONTANT as a string instead of its value
...
...
}
不要混合数据和元数据
这是一种反模式。无论你为什么需要这个,你总是可以避免这样的解决方案。这是一种糟糕的做法——尝试通过数据检索元数据。在您的特定情况下——您怎么可能知道——可能有几个命名空间中定义了相同的类和常量?或者可能在同一类中甚至存在具有相同值的不同常数。
所以,在普通情况下,不能通过传递的值检索类名和常量名。因此,您应该隐式地传递它,或者重新考虑应用程序的结构。
但是,可以使用:
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" }
-但我绝对不会建议在任何情况下使用它。