Лучше всего возвращать переменную, если вы не уверены, существует ли она - PullRequest
0 голосов
/ 11 мая 2018

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

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

Ответы [ 2 ]

0 голосов
/ 11 мая 2018
"refferer" => $_SERVER["HTTP_REFERER"] ?? false; // PHP 7 
"refferer" => isset($_SERVER["HTTP_REFERER"]) ?: $_SERVER["HTTP_REFERER"] : false; // < PHP 7
0 голосов
/ 11 мая 2018

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

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

...