Допустим, я хочу вернуть объект с информацией о клиенте, который запрашивает страницу. Я беру PHP в качестве примера. Что-то вроде этого:
public function getClientInformation(){
return [
"ip" => $_SERVER["REMOTE_ADDR"],
"request_uri" => $_SERVER["REQUEST_URI"],
"refferer" => $_SERVER["HTTP_REFERER"]
];
}
Проблема в том, что я не знаю, установлен ли реферер. Как правильно проверить, установлен ли он, и вернуть 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
];
}
Буду признателен за вашу помощь
В php
Вы можете использовать Операторы контроля ошибок, что-то вроде этого:
public function getClientInformation(){
return [
"ip" => $_SERVER["REMOTE_ADDR"],
"request_uri" => $_SERVER["REQUEST_URI"],
"refferer" => @$_SERVER["HTTP_REFERER"]
];
}
Который вернет false, если есть предупреждение (в случае вызова неопределенного индекса) или ошибка, но не забудьте, где его использовать.
Или вы можете использовать встроенный ?
оператор:
public function getClientInformation(){
return [
"ip" => $_SERVER["REMOTE_ADDR"],
"request_uri" => $_SERVER["REQUEST_URI"],
"refferer" => isset($_SERVER["HTTP_REFERER"])? $_SERVER["HTTP_REFERER"] : false
];
}
В php 7.0
Здесь нулевой оператор объединения ??
:
public function getClientInformation(){
return [
"ip" => $_SERVER["REMOTE_ADDR"],
"request_uri" => $_SERVER["REQUEST_URI"],
"refferer" => $_SERVER["HTTP_REFERER"] ?? false
];
}
Что является сокращением для приведенного выше кода.
"refferer" => $_SERVER["HTTP_REFERER"] ?? false; // PHP 7
"refferer" => isset($_SERVER["HTTP_REFERER"]) ?: $_SERVER["HTTP_REFERER"] : false; // < PHP 7