29

这是我在 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"],我仍然收到通知错误。如何避免出现此错误?

4

7 回答 7

31

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

if( isset($_GET['id'])){
    $api = new api($_GET["id"]);
    echo $api -> processRequest();
}
于 2013-08-06T13:32:24.863 回答
4

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

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

编辑:

自 PHP 7.0 以来,有一个更好且被接受的解决方案:使用空合并运算符 (??)。有了它,您可以将代码缩短为

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

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

于 2013-08-06T13:36:08.443 回答
1

如果没有 id 意味着什么都不应该被处理,那么您应该测试是否没有 id,并优雅地管理故障。

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

然后继续,你尝试/抓住。

当然,除非您要为 api() 添加一些智能,以便以默认 id 响应,否则您将在函数中声明

function api($id = 1) {}

所以,这“一切都取决于”,但如果可以的话,请尽早尝试并失败。

于 2013-08-06T13:33:01.600 回答
1

您必须捕获 Throwable 而不是 Exception:

} catch (Throwable $e) {
于 2021-10-15T14:16:29.087 回答
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);
}
于 2013-08-06T13:32:46.457 回答
0

try...catch 的结构

 <?php

try {
    // perform some task
} catch (Exception $ex) {
    // jump to this part
    // if an exception occurred
}

你可以使用 isset

     <?php
    if(isset($_GET['id'])){
         $api = new api($_GET["id"]);
         echo $api -> processRequest();
     }else{
          $error = array("error" => $e->getMessage());
          echo json_encode($error);
     }
    ?>

奖金示例:

<?php
if(isset($_GET['name'])){
      $name = $_GET['name']; 
 }else{
      $name = "Name not set in GET Method";
 }
if(isset($_GET['age'])){
      $name = $_GET['age']; 
 }else{
      $name = "<br>Age not set in GET Method";
 }
echo $name;
echo $age;
?>
于 2021-10-16T14:01:10.817 回答
0

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

try
{
    $api = new \Api($_GET['id'] ?? null);
}
catch (\Exception $e)
{
    $error = ["error" => $e->getMessage()];
    return json_encode($error);
}
于 2020-12-30T22:25:09.380 回答