不确定变量是否存在时 return 变量的最佳实践

Best practice to return a variable when you're not sure if it exists

假设我想要 return 一个对象,其中包含有关请求页面的客户端的信息。我以 PHP 为例。像这样:

public function getClientInformation(){
    return [
        "ip" => $_SERVER["REMOTE_ADDR"],
        "request_uri" => $_SERVER["REQUEST_URI"],
        "refferer" => $_SERVER["HTTP_REFERER"]
    ];
}

问题是:不知道是否设置了referrer。如何正确检查它是否已设置,如果没有设置 return 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 中你可以使用 Error Control Operators,像这样:

public function getClientInformation(){
    return [
        "ip" => $_SERVER["REMOTE_ADDR"],
        "request_uri" => $_SERVER["REQUEST_URI"],
        "refferer" => @$_SERVER["HTTP_REFERER"]
    ];
}

如果有警告(如果调用未定义的索引)或错误,它将 return 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中有null coalesce operator ??:

public function getClientInformation(){
    return [
        "ip" => $_SERVER["REMOTE_ADDR"],
        "request_uri" => $_SERVER["REQUEST_URI"],
        "refferer" => $_SERVER["HTTP_REFERER"] ?? false
    ];
}

上面的代码 shorthand。

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