我正在为cURL编写一个包装器类,当你设置一个选项时,将选项名称保存到一个数组中,以便我可以管理设置的选项。
问题是,如果cURL选项名称是常量,它们实际上是整数,所以我无法确定哪些选项已被设置。
摘自班级:
class Curl {
protected $_options;
public function setOption($name, $value) {
$result = curl_setopt($this->_handle, $name, $value);
if ($result) {
$this->_options[$name] = $value;
}
return $result;
}
}
假设我设置了以下选项:
array(
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_HEADER => 0,
CURLOPT_POST => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 30
)
Curl::_options
将如下所示:
array(
(int) 78 => (int) 10,
(int) 42 => (int) 0,
(int) 47 => (int) 1,
(int) 19913 => (int) 1,
(int) 13 => (int) 30
)
如何获取cURL常量的实际名称?这可以使用Reflection class吗?
答案 0 :(得分:1)
嗯,从技术上讲,有一种方法可以准备一个数组,curl
常量名称作为字符串,它们的值为,值,值:
$curl_constants = get_defined_constants(true)['curl'];
由于您似乎只处理CURLOPT
常量,因此可以对其进行优化:
$curlopt_constants = [];
foreach ($curl_constants as $constant_name => $constant_value) {
if (strpos($constant_name, 'CURLOPT') === 0) {
$curlopt_constants[$constant_name] = $constant_value;
}
}
问题是,这些数组中的几个常量仍具有相同的值(CURLOPT_SSLCERTPASSWD
,CURLOPT_SSLKEYPASSWD
和CURLOPT_KEYPASSWD
=> 10026
; CURLOPT_READDATA
和CURLOPT_INFILE
=> 10009
)。如果您对这种歧义感到满意,可以翻转此数组,将其转换为哈希值。
$curlopt_constants_hash = array_flip($curlopt_constants);
然后你可以通过查看这个哈希来获得字符串文字:
$curlopt_constant_name =
isset($curlopt_constants_hash[$constant_value])
? $curlopt_constants_hash[$constant_value]
: null
;
那(检查哈希)比在数组上使用array_search
更快。