Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Exception - obsługa wyjątków.
Fifi209
post
Post #1





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Od kilku dni próbuję pojąć "rzucanie" wyjątków.

W swoich klasach "rzucam" wyjątkami przy wystąpieniu błędów typu critical dla mojej aplikacji (czyli takie, które uniemożliwiają dalsze działanie aplikacji)

Powiedzmy, że wyjątki wydają mi się troszkę "nieporęczne" w użytku.

Mam przykładowo:
(piszę od ręki)

Kod
class layout {

// jakieś metody

function load($dir, $file) {

if (file_exists(/* argumenty)) {
// include
}else{
// rzucam wyjątkiem
throw new Exception('Nie mogę załadować pliku xxx.php');
}
}
}


I potem w innym pliku chcąc "złapać" wyjątek...

Kod
try {
$handle->load($plik);
} catch {
// obsługa błędu, czy to zapisanie loga czy wyświetlenie użytkownikowi informacji o błędzie
}


Według moich założeń, wyjątkami rzucałbym tylko przy błędach krytycznych, o których pisałem wyżej.
I tak jest ich sporo, a używanie wszędzie try { } catch { } jest co najmniej nie wygodne.

Macie jakieś swoje pomysły? Doświadczenia ? Co do łapania wyjątków i ich obsługi ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Tzn. Wymyśliłem jedno rozwiązanie do "łapania" wyjątków.
Lecz trzeba by je dopracować. Może coś wymyślimy i będzie przełom? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Mam jakąś klasę:

Kod
class nazwa1 {

// metody bez wyjatków

// a tu z wyjątkami
function wyjatek1() {
// operacje
}

function wyjatek2() {
// operacje
}
}


następnie tworzę nową klasę:

Kod
interface i_nazwa1 {
function wyjatek1();
function wyjatek2();
}

class wyjatki implements i_nazwa1 {

private $handle;

function __construct($handle) {
$this->handle = $handle;
}

function wyjatek1() {
try {
$handle->wyjatek1(); // wywoła funkcję wyjątek1 z klasy nazwa1
} catch (Exception $e) {
// tutaj zapisuję błąd $e->getMessage();
}
}

}


To rozwiązanie byłoby fajne, gdyby te metody były jakoś pogrupowane np. klasa mysql
(@edit właściwie to działa jak takie jądro)

$handle->mysql->funkcja

ale parser

$handle->parser->funkcja

Rozumiesz mnie ?

Bo jak na razie dostaję:

$handle->funkcja // mysql
$handle->funkcja2 // parser

W najlepszym przypadku zrobię sobie nazwy metod na zasadzie:
$handle->MysqlFunckja
$handle->ParserFunckja

Najlepiej jakbym miał
$handle->klasa->funkcja

;[

Jakieś pomysły ?

Ten post edytował fifi209 21.03.2009, 22:20:49
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 00:21