2013-07-26 62 views
5

我試圖調試一些代碼。我希望能夠顯示try中定義的變量catch。例如變量$siteIdPHP嘗試catch:獲得在try中定義的變量

<?php 
try { 
    $siteId = 3; 
    if(1 !== 2) { 
     throw new Exception('1 does not equal 2!'); 
    } 
} catch(Exception $e) { 
    $moreInfo = ''; 
    if(isset($siteId)) { 
     $moreInfo .= ' SiteId»' . $siteId; 
    } 
    echo 'Error' . $moreInfo . ':' . $e->getMessage(); 
} 
?> 

我得到的迴應是Error: 1 does not equal 2!而不是Error SiteId»3: 1 does not equal 2!。我究竟做錯了什麼?

+3

適合我... – Amadan

+0

Jup,我沒有任何問題得到所需的輸出(「 錯誤SiteId»3:1不等於2!」) – Benz

+0

哦。你們是對的!它確實有效:http://ideone.com/ctbe8q我想這是我的代碼中的其他內容導致此問題。謝謝! – iDev247

回答

5

在try/catch結構外聲明$ siteId並在catch中使用!empty($siteId)

$siteId = null; 
try { 

}catch(Exceptions $e) { 
    if(! empty($siteId)) { 

    } 
} 
+3

PHP 5.4:我發現嘗試在try塊中定義一個變量,然後嘗試在try塊外的某處訪問它會導致未定義的變量通知。 –

+0

我認爲你也可以訪問try外部定義的變量。 https://repl.it/LSz3 –

0

嘗試從try/catch語句搬出$網站ID:

<?php 
$siteId = 3; 
try {   
    if(1 !== 2) { 
     throw new Exception('1 does not equal 2!'); 
    } 
} catch(Exception $e) { 
    $moreInfo = ''; 
    if(isset($siteId)) { 
     $moreInfo .= ' SiteId»' . $siteId; 
    } 
    echo 'Error' . $moreInfo . ':' . $e->getMessage(); 
} 
?> 
+1

沒有。如果除了簡單的帶有原始變量的變量賦值之外還做其他更復雜,相關的東西?如果使用庫函數根據另一個值輸出取決於另一個值的庫調用,並且想要檢查catch中的最終值以進行錯誤記錄?這不是一個解決方案。 在嘗試之外的事情有嘗試之外的缺點。 – ahnbizcad