[ torb-d-man @ 17.11.2014. 21:53 ] @
Nov sam u PHP-u, pa malo eksperimentišem i želim namerno da uhvatim "devide by zero" exception i da se izvrši kod unutar CATCH bloka.
Evo kako sam pokušao:
Code:

error_reporting(E_ALL ^ E_NOTICE);

try
{    
    $vvv = 'gasgas';
    $rrr = $vvv / 0;
    echo 'rrr:  '.$rrr;   
}
catch(Exception $e){    
    echo $e->getMessage();    
}

Rezultat je:

Warning: Division by zero in D:\WAMP php DocumentRoot\www\ ... _Samples\_probing_trycatch.php on line 9
rrr:

Znači ne prekine se izvršenje nego se dođe do linije "echo 'rrr: '.$rrr;" i otuda ovo "rrr:" na stranici ispod Warning.
Moje prvo pitanje je kako ja da ga nagnam da uđe u CATCH blok i da pročitam taj getMessage() najzad ?
Moje drugo pitanje je da li ja mogu nekako da disejblujem ovaj Warning da se nevidi ?
Negde sam našao na netu da za disejblovanje upozorenja treba da na vrhu php fajla stavim error_reporting(E_ALL ^ E_NOTICE) i to mi je pre u nekim drugim slučajevima davalo rezultate ali sada ne. Takođe sam u php.ini stavio "error_reporting = E_ALL & E_NOTICE" ali vorning je i dalje tu.
[ Jbyn4e @ 17.11.2014. 22:11 ] @
http://php.net/manual/en/language.exceptions.php
[ torb-d-man @ 17.11.2014. 23:44 ] @
Hmm da, ali ja ne želim da mu ja govorim o kakvoj se grešci radi, nego želim da on saam zaključi i izbaci mi message o grešci (ne mora obavezno da bude division by zero).
Jer ja da znam do koje greške može doći ja bih korigovao kod i izbegao mogućnost pojave greške.
Inače nisam još pročitao sve na linku, možda se u ErrorException krije rešenje.
Ja ne želim da ja pišem "throw new Exception"... nego da mi on sam izbaci koja je greška (kao u VB.NET)
[ Nemanja Avramović @ 18.11.2014. 07:13 ] @
Izuzeci su prilično nova stvar u PHP-u, tako da deljenje nulom ne baca izuzetak već daje PHP grešku.

Rešenje je registrovanje sopstvenog error handler-a koji će za sve greške da baci izuzetak, kao što je objašnjeno u "ErrorException" primeru.
[ torb-d-man @ 18.11.2014. 12:31 ] @
E da bravo , još samo da isprovaljujem kako se to radi, gde se registruje na kom šalteru, da li to znači da treba da pišem neku svoju klasu, nov sam u php-u pa me dosta toga buni, moram da guglam..
[ Predrag Supurovic @ 19.11.2014. 01:19 ] @
http://php.net/manual/en/function.set-exception-handler.php
[ torb-d-man @ 19.11.2014. 19:24 ] @
Hvala, pogledaću, i potražiću i po netu pa ako isprovaljujem kako i dođem do ultimate rešenja postovaću.
Meni u suštini treba da mogu da napišem:
Code:

try {   
        //neki kod
     }
catch (MojExeption $e){   /*MojExeption klasa koja bi trebala da konvertuje erore u exeptione - ako sam skapirao koncept*/
   echo 'GREŠKA: '. $e->getMessage();     
}


i da ovaj try catch blok hvata i error-e i izuzetke i prikaže mi poruku o grešci , bez da ja moram da pišem throw new exeption u okviru try bloka, a disejblovaću sa:
ini_set('display_errors', 0); .. tako sa se sve hendluje preko mog koda.
[ Nemanja Avramović @ 20.11.2014. 20:48 ] @
Da, samo što tvoja klasa koju bacaš kao izuzetak mora da nasledi Exception klasu.

Throw ne moraš da radiš za PHP greške, ako namestiš error handler kako je opisano na linku gore. Ako praviš svoje neke klase u njima možeš da bacaš izuzetke po potrebi a da ih hvataš ovamo u "glavnom" kodu.