2013-01-24 17 views
5

Podczas procesu nauki w PHP próbowałem przeczytać najlepsze praktyki dotyczące zgłaszania błędów i obsługi błędów, ale oświadczenia różnią się w zależności od osoby i starałem się wymyślić jasny, zwięzły sposób obsługi błędów w moich aplikacjach . Używam wyjątków od rzeczy, które mogą pójść źle, ale w większości przypadków trudno mi zrozumieć, czy wyjątek powinien zabić aplikację i wyświetlić stronę błędu, czy po prostu zostać złapanym i dyskretnie rozpatrzonym.Kiedy błąd jest sprawdzany zbyt wiele?

Coś, co wydaje mi się nieuchwytne, czy istnieje coś takiego jak zbyt wiele raportów? Za każdym razem, gdy wywołujesz funkcję, coś może pójść okropnie źle, co oznacza, że ​​gdybyś potwierdził każde wywołanie funkcji, musiałbyś wypełnić strony instrukcjami if i sprawdzić, jaki wpływ może mieć jedna usterka na resztę. Czy istnieje zwięzły dokument lub pomysł na zgłaszanie błędów, który mógłby mi to wyjaśnić? Czy są najlepsze praktyki? Jakie są najlepsze przykłady dobrej obsługi błędów?

Obecnie należy wykonać następujące czynności:

  • Dodaj ważnych wyników zdarzeń do tablicy, aby się zalogować i e-maila do mnie, czy był to błąd krytyczny występuje
  • Wyświetlacz Streszczenie/błędy generycznych dla błędów krytycznych.
  • Użyj wyjątków dla przypadków, które mogą zawieść
  • Włącz raportowanie błędów w środowisku programistycznym i wyłączać na żywo środowiska
  • sprawdzić wszystkie dane wejściowe użytkownika
  • odkażania nieważny wejściowego użytkownika
  • reklamowej zwięzłe, pouczające komunikaty o błędach dla użytkowników bez zapewnienia platformy do wykorzystania.
+0

Krótkie heads-up: Nie wyłączaj raportowania błędów w envach produkcyjnych. Po prostu wyłącz 'display_errors'. Chcesz wiedzieć * szczególnie * jeśli coś pójdzie nie tak podczas produkcji, prawda? (Jednak nie pokazywanie błędów użytkownikom jest ważne, aby nie ujawnić żadnego krytycznego elementu informacji). –

+0

Dzięki Daniel. Nie brałem tego pod uwagę. – Sam

Odpowiedz

3

Wyjątkiem są jedyną rzeczą, która nie zrozumiałeś IMHO: wyjątki mają być poza kontrolą, mają być złapany być rozpatrywane spoza zakresu są wyrzucane w bloku try ma. określony limit: powinien zawierać powiązane działania. Na przykład wziąć blok catch try bazie:

$array = array(); 
try { 
    // connect throws exception on fail 
    // query throws exception on fail 
    // fetch results into $array 
} catch (...) { 
    $array[0]['default'] = 'me'; 
    $array[0]['default2'] = ...; 
    ... 
} 

jak widać umieścić każdą funkcję bazy związany wewnątrz bloku try. Jeśli połączenie nie powiedzie się, a pobieranie nie zostanie wykonane, ponieważ nie ma sensu bez połączenia. Jeśli zapytanie nie powiedzie się, pobieranie zostanie pominięte, ponieważ nie ma sensu pobieranie żadnych wyników. A jeśli coś pójdzie nie tak, mam do dyspozycji pustą tablicę $, więc mogę na przykład wypełnić ją domyślnymi danymi.

Korzystanie wyjątki jak:

$array = array(); 
try { 
    if (!file_exists('file.php')) throw new Exception('file does not exists'); 
    include('file.php'); 
} catch (Exception $e) { 
    trigger_error($e->getMessage()); 
} 

nie ma sensu. To po prostu dłuższa wersja:

if (!file_exists('file.php')) trigger_error('file does not exists'); 
    include('file.php'); 
+0

Czy zatrzymasz wykonywanie pozostałych skryptów, jeśli nie możesz połączyć się z bazą danych? Ponieważ istnieje efekt kaskady. Jeśli nie możesz połączyć się z bazą danych, nie możesz wiele zrobić. – Sam

+1

@Sam, zależy od aplikacji. Pewne jest to, że nie zabiłbym wykonania całej aplikacji z wyjątkiem. "trigger_error" jest na to.Wyjątki naprawdę nie są przeznaczone do zabicia aplikacji, mają za zadanie radzić sobie z możliwymi do naprawienia błędami. – Shoe

+0

Oh. Nigdy tak nie uważałem. Myślałem, że są dla majora. – Sam

Powiązane problemy