Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]własny includeX($x) i obsługa błędów..
zwiedzam
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 5.08.2009

Ostrzeżenie: (0%)
-----


  1. <?php
  2. function includeX($plik) {
  3. include($plik);
  4. }
  5. ?>


Chcę stworzyć własną funkcję, dzięki której będę miał większą kontrolę nad przebiegiem doczepiania plików.

Problem pojawia się jednak w momencie, gdy pliku brak, bo info o nieistniejącym pliku dotyczy miejsca gdzie znajduje się funkcja (plik w którym definiuję funkcję, linia z include()), a chciałbym wiedzieć raczej o miejscu gdzie ta funkcja została wywołana (plik wywołujący, linia z includeX()).
Z tego co wiem - można od biedy przekazywać parametr __FILE__, __LINE__ etc, podczas wywoływania funkcji, ale nie chodzi przecież o to by wypisywać długie linie kodu, tam gdzie właściwie chodzi tylko o jeden parametr - ścieżkę do pliku jaki chcę dołączyć.

Czy jest więc możliwe pobranie informacji o wywołującym w jakiś przystępny sposób ?
Go to the top of the page
+Quote Post
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




albo zwykły komunikat brak pliku $plik, albo zabawa z try{}
Go to the top of the page
+Quote Post
zwiedzam
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 5.08.2009

Ostrzeżenie: (0%)
-----


Zwykły komunikat niestety nie wystarczy - sporo powiązań klasowych, chcę wiedzieć szybko dokładnie która klasa > metoda i zbadać dlaczego coś jest nie tak. Co do obsługi Exceptions - ok, ale jak ?

  1. <?php
  2. try {
  3. if (!include($file)) throw new Exception('tresc');
  4. }
  5. catch (Exception $e) {
  6. //i co ? $e->getCO ?;
  7. }
  8. ?>


Próbowałem już bez throw, niestety nadal pojawiał się komunikat, którego nie chcę i nie kierowało mnie do bloku catch, a nawet jak się udało mniej więcej tak j.w. to jak pobrać dane dot. pliku nadrzędnego, który wywołał funkcję ?
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://php.net/debug_backtrace
Jeżeli nie ma byc komunikatu o bledzie wystarczy ze dasz przed funkcja @
  1. <?php
  2. @include($plik);
  3. ?>


Dodatkoo mozesz uzyc http://php.net/file_exists
Go to the top of the page
+Quote Post
Spawnm
post
Post #5





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




co do //i co ? $e->getCO ?;
$e->getMessage()
http://pl.php.net/manual/pl/language.exceptions.php
Go to the top of the page
+Quote Post
janusz85
post
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 5
Dołączył: 29.07.2009

Ostrzeżenie: (0%)
-----


Sprawdź, czy plik istnieje, jak nie to wyrzuć wyjątek.

Funkcja wywołująca niech używa tej Twojej w ramach try i tak aż do samego szczytu drzewa wywołań.
Go to the top of the page
+Quote Post
zwiedzam
post
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 5.08.2009

Ostrzeżenie: (0%)
-----


@ - wolę używać w includeX - jeden wpis do wszystkich includów za jednym zamachem.
try-catch w funkcjach wywołujących to zawsze coś, ale daje więcej linii kodu zamiast jednego słowa + drugie w nawiasie.
Hmm.. .będzie trzeba się na coś zdecydować.

thx za odp.
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
try-catch w funkcjach wywołujących to zawsze coś, ale daje więcej linii kodu zamiast jednego słowa + drugie w nawiasie.

Ale to normalna struktura kontrolna. ;] Przecież możesz np. wypluwać wyjątek z funkcji:

  1. <?php
  2. function fx(){
  3. throw new Exception();
  4. }
  5.  
  6. //...
  7.  
  8. try{
  9.  fx();
  10.  var_dump($GLOBALS);
  11. }catch(Exception $ex){}
  12. ?>

I tu var_dump" title="Zobacz w manualu PHP" target="_manual się nie wykona.
Go to the top of the page
+Quote Post
zwiedzam
post
Post #9





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 5.08.2009

Ostrzeżenie: (0%)
-----


Znalazłem ; )

Jak by ktoś szukał rozwiązania podobnego typu - brzmi: debug_backtrace(); (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.09.2025 - 17:07