2009-06-10 9 views
16

Mi chiedevo se è considerata una cattiva pratica per convertire globalmente tutti gli errori PHP in Eccezioni. Qualcosa di simile al seguente sarebbe stato utilizzato:PHP - Conversione di tutti gli errori in eccezioni - Buono o cattivo?

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 
    return false; 
} 

Suppongo che il presupposto è che si può solo iniziare a utilizzare "try/catch" attorno ad alcuni pezzi di codice che normalmente buttare errori.

Se non è un caso di buono/cattivo, quali sono alcuni dei trucchi che potrebbero derivare da questa pratica?

risposta

8

Purtroppo, questo non funziona su fatale/analizzare/etc. errori ...

Non ricordo esattamente, ma ho provato questo e in alcuni casi ho ricevuto un messaggio del tipo "non posso lanciare un'eccezione senza soluzione ..." ma non riesco a ricordare le condizioni per ottenere questo risultato Ma ora uso in questo modo e completamente soddisfatto.

+0

Questa risposta sembra più capire la questione, almeno a partire dal momento della sua accettazione. Disprezzo rispondere alle mie stesse domande, ma potrei tornare più tardi. –

2

utilizzare le eccezioni per le cose che sono veramente fuori dal vostro controllo.

Buono:

try { 
    if (fopen('file.txt', 'w') === false) { 
     throw new Exception('File could not be opened for write access.'); 
    } 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

Bad:

try { 
    if (strlen($_POST['username']) < 5) { 
     throw new Exception('Username too short'); 
    } 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

Il primo modo è buono perché si verifica quando la sua qualcosa che l'utente o il controllo delle applicazioni Cant. Non è possibile aprire il file perché? potrebbero essere molte ragioni

Il secondo modo è un uso eccessivo di try/catch quando si dovrebbe usare trigger_error. Il secondo modo è all'utente che non conosce le regole della convalida del nome utente.

In breve eccezioni uso quando non puoi controllare quello che la vostra prova. Ricorda eccezioni hanno più in testa poi trigger_error aswell :)

+1

Di solito ci sono errori che vogliamo solo visualizzare per l'utente, e errori che dovrebbero essere registrati, mostrando all'utente solo smth. come questo "Errore interno n. 123. Per favore contatta l'assistenza". In questo modello le classi di eccezioni sono abbastanza formalizzate per ottenere questo risultato. Quindi, il primo esempio dovrebbe essere registrato, ma il secondo solo per l'utente e dovrebbero essere ie. SystemException e UserException ... Beh, non sono sicuro se 2nd exapmle è "uso eccessivo". – Jet

+0

all'inizio potrebbe non sembrare eccessivo, ma poi devi pensare a problemi di prestazioni. Un oggetto viene creato ogni volta che si verifica un'eccezione. Anche se di per sé non è lento, non è così vicino che basta chiamare qualcosa come trigger_error. e il secondo esempio non ha bisogno di un try catch. Aggiunge solo per spese generali e quando una pagina come questa riceve migliaia di visite al giorno, la perdita di prestazioni è notevole :) Io personalmente non uso mai provare cattura perché io non vedere l'uso per esso. – Ozzy

+6

2013 è qui. Le risorse del computer non sono più un problema.Se la tua unica preoccupazione di usare Exceptions è un nuovo oggetto, probabilmente stai usando un linguaggio di programmazione sbagliato. – Gajus

1

aver lavorato molti anni in Java/.Net in passato e ora PHP in questi ultimi anni, è davvero fastidioso avere tutte queste diverse convenzioni di errore, mentre il modello è davvero Eccezioni buono per tutto - a partire da errori a livello di applicazione, errori di classe, errori di sistema - qualsiasi cosa.

ho davvero investire un bel po 'di lavoro nel cercare di gestire tutti i tipi di tipi di errori, perché ogni libreria/funzioni gestisce gli errori in modo diverso.