当您不确定变量是否存在时返回变量的最佳做法

时间:2018-05-11 20:27:25

标签: php software-quality

假设我想返回一个对象,其中包含有关请求页面的客户端的信息。我以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 :(得分:1)

rvm install 2.5.1 --with-openssl-dir=/usr/bin/openssl

答案 1 :(得分:0)

php中,您可以使用Error Control Operators,如下所示:

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中有null coalesce operator ??

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

这是上述代码的简写。