我正在构建一个围绕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
答案 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);
}