Autor Zpráva
zasphp
Profil *
Ahoj. Delší dobu řeším docela složitý problém a už jsem v koncích. Aplikace je rozsáhlá, tak raději napíšu princip: Mám třídu Logger které předám objekt textfile, který provádí zápis do textového souboru. Potom různě v aplikaci volám Logger::logInfo($text) a takto do toho souboru loguji. Obrovský problém ale nastává, pokud potřebuju logovat v destruktoru nějakého objektu, protože se jako první zavolá destruktor objektu textfile, takže Logger nemá kam logovat - to jsem chtěl vyřešit výjimkami v třídě TextFile (tvořící objekt textfile). Jenže, pokud už se PHP dostane do bodu, kdy začne volat destruktory, tak přestává zachycování výjimek dost dobře fungovat a dostanu všeříkající hlášku "Fatal error: Exception thrown without a stack frame in Unknown on line 0". Netušíte někdo co s tím?
Majkl578
Profil
Bug s výjimkami vyhozenými v destruktoru objektu byl opraven ve verzi 5.3.0.
zasphp
Profil *
Zřejmě ne:
echo phpversion();
5.3.2-1ubuntu4.2
zasphp
Profil *
Třeba tato konstrukce v době volání destruktorů nefunguje moc dobře:
if (is_null($this->filehandler))
  throw new \UnreachableStorageException('Text nejake vyjimky, ktery se ale nezobrazi v destruktoru');
Majkl578
Profil
Můžeš uvést přímo kontext ve kterém to používáš?
Nox
Profil
Není to spíš feature než bug?

Manuál:
"Note: Attempting to throw an exception from a destructor (called in the time of script termination) causes a fatal error."
zasphp
Profil *
Ono zachytávat tu mou výjimku lze, ale pokud jí nechám být tak se mi vypíše jen to nic neříkající hlášení.
Nox
Profil
to hlášení znamená že byla hozená výjimka mimo běžný tok programu (nebo tak něco)

try{ /* obsah destructoru */ }catch(Exception $e){ /* nějaké zpracování chyby */ }

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: