Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nazwa pliku oraz numer linii wywołania funckji., Jak (w elegancki sposób) ustalić skąd wywołano daną funkcję?
pszpiler
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.10.2008

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


Przykładowa sytuacja wygląda tak:

Mam plik functions.php, a w nim zbiór jakiś tam funckji.
  1. function doSomething($param) {
  2. //...
  3. }

Mam też inny plik np index.php, który korzysta z funkcji zawartych w pliku functions.php
  1. require_once 'functions.php';
  2. echo doSomething($param);

I teraz moje pytanie: Czy wewnątrz definicji funkcji doSomething() da się ustalić nazwę skryptu (w tym wypadku z index.php) oraz numer linii w skrypcie z którego została wywołana (w tym wypadku numer linii również w skrypcie index.php)?

Są odpowiednie specjalne stałe
  1. __FILE__
  2. oraz
  3. __LINE__

ale zastosowanie ich wewnątrz definicji funckji doSomething() w taki sposób:
  1. function doSomething($param) {
  2. //...
  3. echo __FILE__;
  4. echo __LINE__;
  5. }

zwróci nazwę skryptu functions.php oraz linię wywołania stałej __LINE__ również wewnątrz skryptu functions.php.

Można oczywiście jakoś przekazać nazwę skryptu i miejsce wywołania:

index.php:
  1. echo doSomething($param, __FILE__, __LINE__);

functions.php:
  1. function doSomething($param, $file, $line) {
  2. //...
  3. echo $file;
  4. echo $line;
  5. }

ale dla zachowania elegancji rozwiązania chciałbym tego uniknąć.

Do czego to potrzebne? Otóż jeśli aplikacja jest duża i jeśli podczas wykonywania funkcji powstaną jakieś błędy to wewnątrz funkcji można byłoby wyświetlać komunikat o miejscu jej wywołania w celu łatwiejszego odnalezienia i usunięcia błędu.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Wszystko fajnie, tylko że miejsce wywołania danej funkcji nie jest i nie będzie faktycznym miejscem wystąpienia błędu. Po co sobie utrudniać w ten sposób życie i mylnie kierować do miejsca wywołania, skoro i tak miejscem docelowym powinno być miejsce, w którym wystąpił błąd?
Go to the top of the page
+Quote Post
pszpiler
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.10.2008

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


Cytat(darko @ 6.04.2010, 00:24:54 ) *
Wszystko fajnie, tylko że miejsce wywołania danej funkcji nie jest i nie będzie faktycznym miejscem wystąpienia błędu. Po co sobie utrudniać w ten sposób życie i mylnie kierować do miejsca wywołania, skoro i tak miejscem docelowym powinno być miejsce, w którym wystąpił błąd?

Nie do końca to jest prawdą - miejsce wywołania funkcji jest i może być przydatne. Przykład:

Jeśli funkcja, która coś robi przyjmuje jako parametr wcześniej skonstruowane zapytanie SQL i wykonuje to zapytanie to potrzebowałbym informacji o tym gdzie została wywołana ta funkcja. Raczej nie potrzebuje informacji, o miejscu powstania błędu (w tym wypadku skrypt i linia wywołania funkcji np. mysql_query()) bo to miejsce będzie wciąż to samo dla wszystkich błędnie skonstruowanych zapytań SQL.

Jakieś propozycje na rozwiązanie problemu?
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(pszpiler @ 6.04.2010, 00:48:55 ) *
Nie do końca to jest prawdą - miejsce wywołania funkcji jest i może być przydatne. Przykład:

Jeśli funkcja, która coś robi przyjmuje jako parametr wcześniej skonstruowane zapytanie SQL i wykonuje to zapytanie to potrzebowałbym informacji o tym gdzie została wywołana ta funkcja. Raczej nie potrzebuje informacji, o miejscu powstania błędu (w tym wypadku skrypt i linia wywołania funkcji np. mysql_query()) bo to miejsce będzie wciąż to samo dla wszystkich błędnie skonstruowanych zapytań SQL.

Jakieś propozycje na rozwiązanie problemu?

Hmm zerknij
debug_print_backtrace
oraz
debug_backtrace
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: 24.08.2025 - 22:37