2013-08-27 22 views
-1

在catch(Exception $ e)的情況下,以下代碼在$ lat = $ track [0]行失敗。如何解決它?在捕捉異常的情況下讀取數組

$track = getPositionalTrack(); 
$lat = $track[0]; 
$lon = $track[1]; 

function getPositionalTrack() 
{ 
    $track = array(); 
    $url = "https://..."; 
    try 
    { 
     $result = file_get_contents($url); 
     $obj = json_decode($result, true); 
     $lat = $obj["lat"]; 
     $lon = $obj["lon"]; 
     $track[0] = $lat; 
     $track[1] = $lon; 
    } 
    catch (Exception $e) 
    { 
     die('ERROR: ' . $e->getMessage()); 
    } 
    return $track; 
} 
+2

什麼是 「失敗」 是什麼意思?什麼是輸出?什麼是錯誤?另外,'try'塊中的代碼都不會拋出任何異常。 – deceze

+1

您嘗試過'var_dump($ obj);'try'}塊嗎? –

+2

另外,如果'json_decode()'中有錯誤,你可以用'json_last_error()'檢查它http://www.php.net/manual/en/function.json-last-error.php –

回答

2

。 所以你必須以防守的方式重寫函數來捕捉錯誤。

function getPositionalTrack() 
{ 
    $url = "https://..."; 

    $result = file_get_contents($url); 
    if (false === $result) { 
     return null; 
    } 

    $obj = json_decode($result, true); 
    if (null === $obj) { 
     return null; 
    } 

    if (isset($obj['lat']) && isset($obj['lon'])) { 
     return $obj; 
    } 

    return null; 
} 

$track = getPositionalTrack(); 
if (null !== $track) { 
    $lat = $track['lat']; 
    $lon = $track['lon']; 
} 

或拋出通過自己的異常的功能:

function getPositionalTrack() 
{ 
    $url = "https://..."; 

    $result = file_get_contents($url); 
    if (false === $result) { 
     throw new Exception('file_get_contents failed'); 
    } 

    $obj = json_decode($result, true); 
    if (null === $obj) { 
     throw new Exception('json_decode failed'); 
    } 

    if (isset($obj['lat']) && isset($obj['lon'])) { 
     return $obj; 
    } 
    else { 
     throw new Exception('no lat/lon keys'); 
    } 

} 

try { 
    $track = getPositionalTrack(); 
    $lat = $track['lat']; 
    $lon = $track['lon']; 
} 
catch (Exception $e) { 
    // react on failure 
} 
0

順便說一句,它失敗,軌道是一個空的數組,所以$ track [0]將「失敗」,如你所說。

你可以嘗試這樣的事情:

catch (Exception $e) 
{ 
    $track[0] = //something 
    $track[1] = //something else 
} 

或者你的函數調用後外處理它,但像deceze指出既不file_get_contents也不json_decode將拋出一個異常,將是混亂

+1

如果你以後會立即「死掉」,那麼有什麼意義......? :P – deceze

+0

@deceze是的,我的壞,只是粘貼OP代碼,忘記刪除它,謝謝。編輯此 – Sugar