2010-03-27 22 views
5

Skąd mam wiedzieć podczas uruchamiania, że ​​mój kod rzucił ostrzeżenie?nieobsługiwane błędy w php

przykład

try { 
    echo (25/0); 
} catch (exception $exc) { 
    echo "exception catched"; 
} 

rzuca „Ostrzeżenie: dzielenie przez zero” błąd, że nie poradzi sobie na mojego kodu.

Odpowiedz

7

Poszukujesz funkcji set_error_handler(). http://ch.php.net/set_error_handler Sprawdź przykładowy kod w instrukcji.

Upewnij się, że nie tylko tłumisz ostrzeżenia o błędach, ale zamiast tego przekierowujesz je w trybie cichym do pliku dziennika lub czegoś podobnego. (To pomaga wyśledzić błędów)

+0

W schodzili co @svens powiedział tłumienie błędu na wyłączenie wszystkich błędów odbywa się 'error_reporting (0)' zobaczyć http://us.php.net/manual/en/errorfunc.configuration. php # ini.error-reporting –

+0

.. lub przez dodanie '@' do polecenia. Btw. obsługa błędów będzie również wywoływana, gdy error_reporting jest ustawione na zero (z errno = 0). Obsługa błędów jest bardzo przydatna i może być używana do robienia takich rzeczy, jak końcowe rejestrowanie czasu, parametry, wykorzystanie pamięci itp. I powiadamianie administratora (w przypadku błędów krytycznych). Nie chciałem polecać tłumienia błędów :). – svens

5

trzeba obsłużyć wyjątek siebie jako follows.e.g

function inverse($x) 
{ 
    if(!$x) 
    { 
     throw new Exception('Division by zero.'); 
    } 
    else 
    { 
     return 1/$x; 
    } 
} 


try 
{ 
    echo inverse(5); 
    echo inverse(0); 
} 
catch (Exception $e) 
{ 
    echo $e->getMessage(); 
} 
+0

zupełnie źle rozumiesz, jak działają wyjątki – user187291

+0

@ stereofrog, dziękuję za uwagę. Próbuję to wyjaśnić. – Young

+0

celem wyjątków nie jest "zapobieganie" powstawaniu błędów, jak to się dzieje, ale zapewnienie sposobu radzenia sobie z nimi _ kiedy to się stanie. Nadal +1 za próby. – user187291

2

Musisz zainstalować obsługi błędu, który konwertuje starym stylu php „błędy” do wyjątków. Zobacz przykład here

Powiązane problemy