这是我在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"]
中没有任何内容时,我仍然会收到通知错误。
如何避免出现此错误?
答案 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);
}