【发布时间】:2018-10-22 07:30:54
【问题描述】:
假设我想返回一个对象,其中包含有关请求页面的客户端的信息。我以 PHP 为例。像这样的:
public function getClientInformation(){
return [
"ip" => $_SERVER["REMOTE_ADDR"],
"request_uri" => $_SERVER["REQUEST_URI"],
"refferer" => $_SERVER["HTTP_REFERER"]
];
}
问题是:不知道是否设置了referrer。我如何正确检查它是否已设置,如果没有则返回 false?这是我想出的,但我不喜欢它:
public function getClientInformation(){
$referrer = false;
if(array_key_exists("HTTP_REFERER", $_SERVER)){
$referrer = $_SERVER["HTTP_REFERER"];
}
return [
"ip" => $_SERVER["REMOTE_ADDR"],
"request_uri" => $_SERVER["REQUEST_URI"],
"refferer" => $referrer
];
}
感谢您的帮助
【问题讨论】:
-
我建议
array_key_exists()替代isset()。它们是相似的,但在某些情况下它们是不同的。另外,为什么不从结果数组中删除refferer键呢?毕竟价值不是false,没有价值! -
@UlrichEckhardt 好点,但是当我这样做时出现错误。
-
在您的情况下,我通常只使用:"refferer" => (isset($_SERVER["HTTP_REFERER"])) ? $_SERVER["HTTP_REFERER"] : false,我觉得它更容易阅读。虽然我不认为你有什么是错的。
标签: php software-quality