2013-08-06 38 views
12

Đây là try/catch block của tôi trong PHP:PHP: chỉ số không xác định mặc dù sử dụng thử bắt

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

Khi không có gì trong $_GET["id"] là, tôi vẫn nhận được lỗi thông báo. Làm cách nào để tránh bị lỗi này?

+2

sử dụng 'isset ($ _ GET [ 'id']) 'hoặc' array_key_exists ('id', $ _GET); ' .. một triệu bản sao để đếm cho câu hỏi này .. – dbf

+0

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

+7

Thông báo PHP không phải là Ngoại lệ. – sangaran

Trả lời

21

sử dụng isset chức năng để kiểm tra xem biến được đặt hay không:

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

Hãy thử kiểm tra nếu $_GET được thành lập

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

Nếu sự vắng mặt của id nghĩa gì sau đó nên được xử lý, thì bạn nên kiểm tra sự vắng mặt của id, và quản lý thất bại một cách duyên dáng.

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

THEN tiếp tục và bạn thử/nắm bắt.

Trừ khi tất nhiên bạn đã thêm một số smartness để api() để được đáp lại bằng một id mặc định, mà bạn muốn khai báo trong hàm

function api($id = 1) {} 

Vì vậy, nó là "Tất cả phụ thuộc", nhưng hãy thử và thất bại sớm nếu bạn có thể.

+0

Lưu ý rằng' empty() 'không kích hoạt thông báo nếu biến không được thiết lập. Như vậy, 'isset()' là không cần thiết. –

0

Nếu bạn muốn có một nhanh và "bẩn" giải pháp, bạn có thể sử dụng

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

Đối với những đứa trẻ ở nhà, điều này thực sự là * bẩn * và bạn không nên coi đây là một giải pháp. –

+1

@JasonMcCreary +1 cho trẻ em ở nhà .. –