Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie mam już siły na ten szalony php
Forum PHP.pl > Forum > PHP
Orzeszekk
  1. try
  2. {
  3. /* Odczytujemy standardowo rb, jezeli bedziemy zapisywac to tam pozniej zamykamy i otwieramy drugi raz */
  4. try
  5. {
  6. try
  7. {
  8. /* Jesli jestesmy w trybie read-only, odblokowujemy plik, i zamykamy go. Jeżeli nie, pozostawiamy
  9.   * to w getii dalszych metod.
  10.   */
  11. throw new Exception('eeeeee');
  12. flock($this->file, LOCK_UN);
  13. /* zamykamy połączenie. */
  14. fclose($this->file);
  15. }
  16. /* Ten blok powinien zlapac wyjatek a nie lapie*/
  17. catch (Exception $e)
  18. {
  19. echo 'cr3tr3t3rj';
  20. }
  21. [....]


Jeśli ktoś jest w stanie to niech mi wyjaśni jakim prawem pogrubiony blok catch(Exception $e) nie łapie wyjątku throw new Exception('eeeeee');. Wyjątek jest łapany przez ostatni blok (najbardziej zewnętrzny) zamiast przez pierwszy.


Są 3 zagniezdzone w sobie bloki try catch bo to czesc wiekszej metody.

Przeciez powinien łapać jak najbliższy blok a nie jak najdalszy!
melkorm
Może po prostu gdzieś Tobie w pierwszym zagnieżdżeniu coś rzuca wyjątkiem? A najlepiej pokaż cały kod.
Orzeszekk
Nie rzuca właśnie. Przegladalem kod debuggerem i dokładnie widać jak rzucany jest wyjątek po czym przeskakuje od razu do ostatniego catch.

Kodu nie pokażę bo zacząłem przepisywać właśnie tą metodę i juz nie mam tego kodu ktory wrzuciłem.. może jak napiszę ją inaczej to przestanie głupieć.
Smertius
Raz rzucanie wszędzie wyjątku klasy Exception, nie jest najlepszym pomysłem. Najlepiej korzystać z klas wyjątków SPL, a jeszcze lepiej rozszerzyć klasy SPL o własne typy wyjątków. Ale to tak na marginesie.

Co do twojego problemu, cudów nie ma. Rzucasz gdzieś wyjątkiem w bloku wyżej i ten jest łapany. Daj sobie w bloku catch
  1. echo $e->getLine() . '<br>';
  2. echo $e->getFile() . '<br>';
  3. echo $e->getMessage() . '<br>';


I będziesz widział który wyjątek łapiesz
batman
Proszę zmienić tytuł na poprawny, inaczej temat zostanie zamknięty.
Orzeszekk
mam zrobiony error handler ktory rzuca mi wyjątki utworzone z błędów (swoja droga to nie rzucam wtedy exception tylko własna klase internalexception dziedziczącą z exception)

uzylem funkcji filesize objętej w bloki try catch i wyrzucilo mi ekran z błędem.

myslalem ze moze cos nie tak z tym errorhandlerem jest dlatego dodalem przed filesize throw new exception, najzwyklejszy wyjątek zeby przetestowac czy znowu złapie nie ten blok co trzeba.

W innych miejscach skryptu ta konstrukcja try{ filesize ($plik) } catch (Exception $e) {} działa bez zarzutu.

wyrzuca nadal więc wtf nie mam pojęcia.
batman
Widzę, że nie obejdzie się bez zamknięcia wątku. Jeśli chcesz aby został otwarty, wyślij do dowolnego moderatora poprawy tytuł wraz z linkiem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.