Лучше всего возвращать переменную, если вы не уверены, существует ли она

Допустим, я хочу вернуть объект с информацией о клиенте, который запрашивает страницу. Я беру 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
];
}

Буду признателен за вашу помощь

0

Решение

В 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
];
}

Что является сокращением для приведенного выше кода.

0

Другие решения

"refferer" => $_SERVER["HTTP_REFERER"] ?? false; // PHP 7
"refferer" => isset($_SERVER["HTTP_REFERER"]) ?: $_SERVER["HTTP_REFERER"] : false; // < PHP 7
1

По вопросам рекламы [email protected]