Struktura výjimek rubrika: Programování: PHP

1 frantisek.sitner
položil/-a 24.10.2015

Ahoj, chci se zeptat, jak pracujete s výjimkami? Vytváříte pro chybu výjimku např.:

class FileNotFoundException extends Exception{}

nebo používáte kódy v podobě konstant např.:

class FileException extends Exception
{
    const FILE_NOT_FOUND = 0;
}

nebo něco úplně jiného? V prvním případě mi přijde, že vzniká moc tříd, v druhém případě je zase velký CATCH blok s SWITCHem/moc IFy.

odkaz
6 Tomáš Votruba
odpověděl/-a 27.10.2015

O tom, jak strukturovat výjimky a jejich zprávy přehledně, dnes vyšel pěkný článek

Komentáře

  • Kit : To se může hodit, pokud potřebuješ do výjimky napěchovat víc informací. Stejně dobře to však můžeš udělat injektáží zvenku: throw new InvalidRowException(incorrectColumns($row)); která už nemusí být statická a může mít přístup k ostatním atributům objektu, například k $this->expectedColumns. Ve finále můžeš celou podmínku spojit do jednořádkového volání validační metody: $row->checkColumns($expectedColumns); která se v případě neúspěchu postará o vyhození výjimky a naformátování textu. 27.10.2015
  • Kit : Ještě mám jedno možné řešení, tentokrát statické: UserTable::checkColumns($row); V daném případě však chybí lokalizace místa vzniku chyby a muselo by se dodělat jako další parametr, což je poněkud nepraktické. 27.10.2015
  • Honza Břešťan : Ten clanek se sice strukturovani vyjimek vubec netyka, ale na exception messages je to dobry pristup. Samotny .NET to takhle pouziva pro interni vytvareni vyjimek. Ja to micham s tim, co popisuje Kit v prvnim komentari - podle toho, kde vsude je potreba to mit pristupne (a jestli muzu jako factory pouzit samotnou tridu vyjimky, nebo k jejimu kodu nemam pristup). 27.10.2015

Pro zobrazení všech 6 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.