PHP注意:尽管使用了try \ catch,但未定义索引

时间:2013-08-06 13:30:26

标签: php try-catch

这是我在PHP中的try / catch块:

try
{
    $api = new api($_GET["id"]);
    echo $api -> processRequest();
} catch (Exception $e) {
    $error = array("error" => $e->getMessage());
    echo json_encode($error);
}

$_GET["id"]中没有任何内容时,我仍然会收到通知错误。 如何避免出现此错误?

5 个答案:

答案 0 :(得分:24)

使用isset函数检查变量是否已设置:

if( isset($_GET['id'])){
    $api = new api($_GET["id"]);
    echo $api -> processRequest();
}

答案 1 :(得分:2)

如果您想要快速且“脏”的解决方案,可以使用

$api = new api(@$_GET["id"]);

修改

自PHP 7.0以来,有一个更好,更可接受的解决方案:使用null coalescing operator (??)。有了它,您可以将代码缩短为

$api = new api($_GET["id"] ?? null);

并且您没有收到通知,因为您定义了在未定义变量的情况下应该发生的事情。

答案 2 :(得分:1)

如果没有id意味着什么都不应该被处理,那么你应该测试缺少id,并优雅地管理失败。

if(!isset($_GET['id'] || empty($_GET['id']){
// abort early
}

然后继续尝试/抓住。

除非您当然要为api()添加一些智能,以便使用默认ID进行响应,您将在函数中声明

function api($id = 1) {}

所以,它“完全取决于”,但如果可以的话,尽早尝试失败。

答案 3 :(得分:0)

尝试检查$_GET是否已设置

try
{
    if(isset($_GET["id"]))
    {
      $api = new api($_GET["id"]);
      echo $api -> processRequest();
    }
} catch (Exception $e) {
    $error = array("error" => $e->getMessage());
    echo json_encode($error);
}

答案 4 :(得分:0)

从 PHP 7 开始,我们现在有了 Null Coalescing Operator

try
{
    $api = new \Api($_GET['id'] ?? null);
}
catch (\Exception $e)
{
    $error = ["error" => $e->getMessage()];
    return json_encode($error);
}