Autor Zpráva
radecek
Profil
Ahoj,

mam na webu dve tridy - mysql a checkForm. mysql se stara o pripojeni na mysql server, vkladani dotazu, vypis, update, ... a checkForm overuje jeslti je formular spravne odeslan - shoda hesel, vyplnene povinne polozky, atd.. A potrebuju k nim vytvorit spolecnou tridu system, ktera vytvari seznam oznanemi - spatne vyplnene heslo, login uz existuje atd.
Jan Tvrdík
Profil
radecek:
Nechápu, co si představuješ, že pro tebe uděláme.
Mastodont
Profil
radecek
Dle zadání ty dvě třídy nemají nic společného, takže je blbost vytvářet k nim předka.
radecek
Profil
Prave bych poreboval aby mely spolecny system. Ale kdyz vytvorim:

mysql extends system
check_form extends system

Tak budou existovat dve promenne oznameni (mysql->oznameni, check_form->oznameni) a ja bych potreboval aby se to vsechno ukladalo do jednoho mistav pameti. Abych pak mohl tyto chybi vypsat v jednom cyklu.
Aesir
Profil
radecek:
A potrebuju k nim vytvorit spolecnou tridu system, ktera vytvari seznam oznanemi - spatne vyplnene heslo, login uz existuje atd.
Od toho jsou vyjímky, které si z třídy vyhodíte a následně si je zpracujete dle svého.

Pokud potřebujete uchovávat globálně nějaké údaje (vaše oznámení napříkald), tak v rámci jednoho requestu můžete využít vzor registry, pokud to přes více requestů, stejně budete muset šáhnout po session nebo něčem podobném.
radecek
Profil
Ale vyjimky by se nemeli moc pouzivat ne?
Mike8748
Profil
radecek
a to jako proc ne?
radecek
Profil
Zpomaluji :)
Aesir
Profil
radecek:

Zpomalují co? A z čeho vycházíte? Máte k tomu odkaz na nějaké zdroje?
radecek
Profil
Nevim ucili jsme se to ve skole ale v C. Vyjimky se nemaji pouzivat moc v programu ze ho zpomaluji ze funguji na principu navesti..
Aesir
Profil
radecek:
Ono záleží dost na tom, s čím porovnáváte. Samozřejmě, že když budete porovnávat ošetření chyb přes vyjímky vs. neošetření chyb nebo jejich potlačení, tak tam rozdíl bude.

Co se týče vyjímek v C (C++), tak tam hodně záleží na použitém kompilátoru a rozhodně to nelze říct obecně.

Chování vyjímek a bloku try...catch bylo v PHP, ve větvi 5.2, docela dost upraveno a fixováno (například vyhodnocování try catch bloku i při nevyhození vyjímky apod.), ale ani v dřívějších verzích bych se rapidního poklesu výkonu nebál - rozhodně ne na úkor komfortu, který nabízejí.

Zpět ale k vašemu problému. Například vaše třída checkForm má předopkládám metodu, která vrací true/false na dotaz o validitě údajů. Proč v případě false nenastavit členskou proměnnou, která by obsahovala pole patřičných hlášek? Takže zpracování by proběhlo např. nějak takto:

if (false === $form->isValid($filteredData)) {
    $messages = $form->getMessages();
} else {
    ...
}
Mastodont
Profil
Aesir
Uvádí to třeba Schlossnagle v Advanced PHP Programming, a to je pán, co tomu rozumí :-)
Exceptions are bit slower than traditional flow-control syntaxes.
Aesir
Profil
Mastodont:
To ano, dobrá kniha. Vyšla v roce 2004, to byla pátá verze PHP podle changelogu teprve RC1 ;)

Myslím, že pokud na jeden request nevyhodíte řádově opravdu hodně (stovky? tisíce?) vyjímek, že rozdíl opravdu nepoznáte.
Mastodont
Profil
Samozřejmě že se to v praxi neprojeví, ale dotaz zněl, zda zpomalují :-)
Joker
Profil
radecek
Ale vyjimky by se nemeli moc pouzivat ne?
Právě naopak. Výjimky by se IMHO měly používat.

Typická je situace, kdy:
1. Nějaká funkce typicky vrátí nějakou hodnotu, například řetězec
2. Krom toho může nastat chyba. V takovém případě potřebuju dvě informace: že vznikla chyba a o jakou chybu jde. Případně ještě informaci "o jakou chybu jde" jednak "pro počítač" a jednak "lidsky srozumitelně".

...tohle nastává dost často a nevím o lepším způsobu řešení, než výjimky.
Bez výjimek nastává to, že jedna, dvě, případně i víc úrovní v aplikaci musí detekovat a zpracovávat chybu na kterou neumí kloudně reagovat jen proto, aby se ta chyba propagovala výš na úroveň, která reagovat umí.
Mastodont
Profil
V takovém případě potřebuju dvě informace: že vznikla chyba a o jakou chybu jde
To se dá řešit i návratovou hodnotou funkce a výstupním parametrem ve stylu Céčka. Mně se u výjimek líbí snad jen to, že v try může být víc řádků kódu, čili neřeším chyby u každého prováděného příkazu, ale pro celý blok.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: