我们怎样才能获得函数调用中使用的变量名?

时间:2013-12-03 11:23:56

标签: php

我们试图从

获取变量的名称,即“ClassName :: CLASSCONSTANT”
$this->TestFunction(ClassName::CLASSCONSTANT);

功能是这样的:

function TestFunction() {
   func_get_args();

   // need ClassName::CLASSCONTANT as a string instead of its value 
   ...
   ...

}

1 个答案:

答案 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" } 

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