2013-07-26 9 views
5

Sto cercando di eseguire il debug del codice. Voglio essere in grado di mostrare le variabili definite in try in catch. Ad esempio la variabile $siteId.PHP try fermo: ottenere variabile definita nel tentativo

<?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(); 
} 
?> 

La risposta che ottengo è Error: 1 does not equal 2! invece di Error SiteId»3: 1 does not equal 2!. Che cosa sto facendo di sbagliato?

+3

funziona per me ... – Amadan

+0

Jup, non ho problemi a trovare l'uscita desiderata (" Errore SiteId» 3: 1 non è uguale 2! ") – Benz

+0

Oh. Ragazzi, avete ragione! Funziona: http://ideone.com/ctbe8q Credo che sia qualcos'altro nel mio codice che sta causando il problema. Grazie! – iDev247

risposta

5

Declare $ SiteID al di fuori del try/catch costrutto e utilizzare !empty($siteId) all'interno del pescato.

$siteId = null; 
try { 

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

    } 
} 
+3

PHP 5.4: ho scoperto che il tentativo di definire una variabile all'interno di un blocco try, poi cercando di accedervi da qualche parte al di fuori del blocco try porterà ad avvisi variabile non definita. –

+0

Penso che puoi anche accedere alla variabile definita all'interno del try catch al di fuori di essa. https://repl.it/LSz3 –

0

tenta di spostare fuori $ SiteID da try/catch:

<?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

no. E se facessi altri tipi di cose più complicate e dipendenti oltre ad un semplice compito variabile con un primitivo? Cosa succede se si utilizza una chiamata alla libreria che emette un valore in base a un altro valore in base a un altro valore e si desidera ispezionare il valore finale nella cattura per la registrazione degli errori? Questa non è una soluzione. Le cose che sono al di fuori della prova hanno lo svantaggio di essere al di fuori della prova. – ahnbizcad

Problemi correlati