如何获取函数调用中使用的变量名


How can we get variable name used in function call?

我们正在尝试从获取传递的变量的名称,即"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" } 

-但我绝对不会建议在任何情况下使用它。