2013-08-06 33 views
12

這是在PHP我try/catch塊:PHP公告:未定義的索引雖然使用try 抓

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

當有沒有在$_GET["id"],我仍然得到通知錯誤。 如何避免發生此錯誤?

+2

使用'isset($ _ GET [ '身份證'])'或'array_key_exists( '身份證',$ _ GET);' ..一百萬重複計數這個問題.. – dbf

+0

if(isset($ _ GET ['id'])){$ api = new api($ _ GET ['id']); } – Maximus2012

+7

PHP通知不是例外。 – sangaran

回答

21

使用isset功能檢查,如果變量設置與否:

if(isset($_GET['id'])){ 
    $api = new api($_GET["id"]); 
    echo $api -> processRequest(); 
} 
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); 
} 
1

如果沒有ID的意思再沒有什麼應該被處理,那麼你應該測試沒有ID,並妥善地管理失敗。

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

然後繼續,你嘗試/趕上。

當然,除非你添加一些機靈到API(),從而報以默認的ID,你會在函數聲明

function api($id = 1) {} 

所以,「一切都取決於」,但如果可以,儘早嘗試並失敗。

+0

請注意,如果未設置變量,empty()不會觸發通知。因此,'isset()'是不必要的。 –

0

如果你想有一個快速和 「髒」 的解決方案,你可以使用

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

對於家裏的孩子來說,這確實是髒*,你不應該考慮這個解決方案。 –

+1

@JasonMcCreary爲家中的孩子+1。 –