[ Mister_rap @ 14.11.2009. 18:36 ] @
Pozdrav,

Imam jedan problem ali ne i jasnu ideju kako da izadjem na kraj sa tim. Po sredi mozda jeste dizajn issue ali nazalost izmena arhitekture iz vise razloga nije prihvatljiva, mada na kraju mozda to bude jedino resenje...

Ono sto me zanima je sledece:

Kako da umesto fatal error-a dobijem exception a ne taj fatal error?

Evo recimo nekog primjera:

Code:

        try{
            $this->_somecls = new SomeCLS();
        }
        catch(Exception $e){
            //log it or something!
        }


Pri cemu jelte klasa SomeCLS ne postoji i kao izlaz ovoga imam:

Fatal error: Class 'SomeCLS' not found in...

A to je ono sto zelim da izbjegnem, i zelim da dobijem exception.
Ista situacija je sa nizom funkcija recimo require_once('fajl_kojeg_nema') i tako redom...

E logicno je da se namece pitanje zasto bi neko trazio fajl kojeg nema ili instancirao nepostojecu klasu?

Odgovor na ovo je malo specifican, jer aplikacija koristi java bridge i jos neke specificne stvari i radi se o "generisanju koda u letu" pa i ako problemi ovog tipa ne bi trebalo da se desavaju ipak mogu da se dese i ja iste moram da hendlujem.

Pokusavao sam sa http://php.net/manual/en/function.set-error-handler.php ali se iskreno govoreci nisam posvetio detaljnoj analizi, mada je moguce da tu lezi resenje za problem koji imam. U nekim slucajevima error_handler radi ok, al u nekim nazalost ne (bar to sto sam napisao).

Svi saveti predlozi i eventualna slicna iskustva su dobrodosala


[ Mister_rap @ 14.11.2009. 19:08 ] @
Evo korisnog snippeta koji resava problem za ovo sto sam napisao:

Code:

function exceptions_error_handler($severity, $message, $filename, $lineno) {
  if (error_reporting() == 0) {
    return;
  }
  if (error_reporting() & $severity) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
  }
}
set_error_handler('exceptions_error_handler'); 


Javljam se ako bude jos nekih problema...
[ Nikola Poša @ 14.11.2009. 19:08 ] @
A da li dolazi u obzir da ispred tih require_once stavljaš "@", kako bi izbegao ispis greške? Ili ti baš moraš da "uhvatiš" tu grešku?

Mislim da je i meni jednom trebalo nešto slično, i evo kako sam ja to rešio. Inače, ovo sam pronašao čini mi se baš negde u manual-u, neki lik ga je post-ovao :
Code:
class DefaultException extends Exception {
    public static function errorHandler($code, $string, $file, $line, $context) {
        $ex = new self($string, $code);
        $ex->line = $line;
        $ex->file = $file;
        
        throw $ex;
    }
}

//I onda nege u kodu:
set_error_handler(array("DefaultException", "errorHandler"), E_ALL);

I onda bi mogao da hvataš izuzetke, koji će prihvatati i sve error-e.
[ Mister_rap @ 14.11.2009. 19:54 ] @
Citat:

A da li dolazi u obzir da ispred tih require_once stavljaš "@", kako bi izbegao ispis greške? Ili ti baš moraš da "uhvatiš" tu grešku?


Moram sve da hvatam naravno, i eh da je samo require_once nego bas ali bas gomila stvari su potencijalno opasne.

Sto se tice snippeta koji si ostavio, svede se fakticki na isto kao i prethodni (takodje je sa php.net) samo sto naravno imam niz nekih dodatnih funkcionalnosti u toj klasi sada...
[ Nikola Poša @ 14.11.2009. 20:53 ] @
Pa da, isto mu dođe, post-ovali smo u isto vreme ta dva snippet-a, i da sam prethodno video taj tvoj, ne bih ni slao tu moju poruku.

Eto, objektno-orijentisano rešenje uvek nudi više mogućnosti.