2013-08-06 9 views
12

To mój try/catch w PHP:PHP Wskazówka: niezdefiniowany indeks chociaż użyciem try połów

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

Gdy nie ma nic w $_GET["id"], nadal pojawia się błąd wypowiedzenia. Jak mogę uniknąć tego błędu?

+2

użyć 'isset ($ _ GET [ 'id'])' lub 'array_key_exists ('id', $ _GET);' .. milion duplikatów do liczenia na to pytanie .. – dbf

+0

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

+7

Uwaga dotycząca PHP nie jest wyjątkiem. – sangaran

Odpowiedz

21

użycie isset funkcja, by sprawdzić, czy zmienna jest ustawiona czy nie:

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

Spróbuj sprawdzić, czy $_GET została ustawiona

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

przypadku braku identyfikatora oznacza nic nie powinno być następnie przetwarzane, powinieneś testować pod kątem braku identyfikatora i z wdziękiem zarządzać porażką.

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

THEN dalej i próbujesz/złapać.

ile oczywiście było dodać kilka sznyt (API), który jest tak zareagował z domyślnym identyfikatorem, który chcesz zadeklarować w funkcji

function api($id = 1) {} 

Tak, to „wszystko zależy”, ale spróbuj i wcześnie zawieść, jeśli możesz.

+0

Zauważ, że' empty() 'nie uruchamia powiadomienia, jeśli zmienna nie jest ustawiona. Jako takie, 'isset()' jest niepotrzebne. –

0

Jeśli chcesz szybko i "brudne" rozwiązanie, można użyć

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

Dla dzieci w domu jest to rzeczywiście * brudne * i nie należy traktować tego jako rozwiązania. –

+1

@JasonMcCreary +1 dla dzieci w domu .. –