获取在PHP中作为参数传递的常量的名称

时间:2014-06-22 22:38:32

标签: php

我正在构建一个围绕curl的面向对象的包装器,并为CURLOPT_常量创建了一个setter,它存储到$ property => $ value数组。

public function setCurlOpt($optCode, $optValue) {
$ch = $this->ch;
curl_setopt($ch, $optCode, $optValue);
$this->curlOpts[$optCode] = $optValue;
}



$curler->setCurlOpt(CURLOPT_FOLLOWLOCATION, 1);`

但是,$ optCode不是数组的有效索引,因为它引用了资源ID而不是常量的名称。

为了使这项工作,我需要能够获得常量的名称。有没有办法在PHP中做一些事情:

function getConstantName($fromVariable) {
... return $constantName;
}
$x = CONSTANT_Y;
echo getConstantName($x);

输出:CONSTANT_Y

2 个答案:

答案 0 :(得分:2)

一旦将常量赋给变量,就无法找出在赋值中使用的常量。 PHP只是将常量值复制到变量中。

只有你可行的选择是使用defined()和constant()的组合,并在CURLOPT _之后只传递选项名称

public function setCurlOpt($optCode, $optValue) {
  if (defined("CURLOPT_" . $optCode) === true)
    {
      $ch = $this->ch;
      curl_setopt($ch, constant("CURLOPT_" . $optCode), $optValue);
      $this->curlOpts[constant("CURLOPT_" . $optCode)] = $optValue;
    }
}

$curler->setCurlOpt("FOLLOWLOCATION", 1);

答案 1 :(得分:0)

这是一个很长的镜头,但值得一试:

function getConstantName($fromVariable) {
  return array_search($fromVariable, get_defined_constants(), 1);
}